AJAX和ASP.NET MVC 3:如何将字符串参数和数组同时传递给Control
我有以下Controller签名:
public void DoSomething(string dialerJob,MyViewModel[] agentStates) viewModels表示数组中的表单字段(HTML表中的选定项).我想出了如何将表单元素int作为数组参数传递给控制器??,这要感谢Robert Koritnik的.toDictionary()jQuery插件(http://erraticdev.blogspot.com/2010/12/sending-complex-json-对象到aspnet.html). 但是,现在我需要将一个额外的字符串参数(从下拉列表)传递给控制器??,我无法弄清楚如何使其工作.我尝试过各种组合,比如: var job = $('#DialerJobs').attr('value'); var data1 = $.toDictionary(data,"agentStates"); $.ajax({ url: "/Blending/ChangeOutboundJob",type: "POST",dataType: "application/JSON",data: {job,data1} }); 我也尝试过以下方法: var job = $('#DialerJobs').attr('value'); var data1 = $.toDictionary(data,data: {dialerJob: job,agentStates: data1} }); 但是没有工作. 如果我从要发送的数据中删除dialerJob参数,则agentStates会正确填充控制器.发送的内容如下所示: agentStates[0].agentId=7654&agentStates[0].projectId=999&agentStates[0].stateId=1&agentStates [0] .subStateId = 1&安培; agentStates [1] .agentId = 9876&安培; agentStates [1] .projectId = 999&安培; agentStates [1] .stateId = 1&安培; agentStates [1] .subStateId = 1 但是,如果我包括dialerJob,那么发送的是: dialerJob=SomeJob&agentStates[0][name]=[0].agentId&agentStates[0][value]=84&agentStates[1][name]= [0] .projectId&安培; agentStates [1] [值] = 999&安培; agentStates [2] [姓名] = [0] .stateId&安培; agentStates [2] [值] = 1&安培; agentStates [3] [名称] = [0] .subStateId&安培; agentStates [3] [值] = 1&安培; agentStates [4] [名称] = [1] .agentId&安培; agentStates [4] [值] = 15884&安培; agentStates [5] [名称] = [1] .projectId&安培; agentStates [5] [值] = 999&安培; agentStates [6] [名称] = [1] .stateId&安培; agentStates [6 ] [值] = 1&安培; agentStates [7] [名称] = [1] .subStateId&安培; agentStates [7] [值] = 1 这一切都搞砸了…… 解决方法
您可以使用JSON请求:
$.ajax({ url: '@Url.Action("ChangeOutboundJob","Blending")',type: 'POST',contentType: 'application/json; charset=utf-8',data: JSON.stringify({ dialerJob: 'job',agentStates: [ { property1: 'value 1',property2: 'value 2' },{ property1: 'value 3',property2: 'value 4' } ] }),success: function (result) { // TODO: process the results } }); 这将成功映射到以下控制器操作: public void DoSomething(string dialerJob,MyViewModel[] agentStates) MyViewModel的定义如下: public class MyViewModel { public string Property1 { get; set; } public string Property2 { get; set; } } 备注:JSON.stringify方法本身内置于所有现代浏览器中.如果您需要支持旧版浏览器,则需要在页面中包含json2.js脚本. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |