加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

AJAX和ASP.NET MVC 3:如何将字符串参数和数组同时传递给Control

发布时间:2020-12-16 02:50:18 所属栏目:百科 来源:网络整理
导读:我有以下Controller签名: public void DoSomething(string dialerJob,MyViewModel[] agentStates) viewModels表示数组中的表单字段(HTML表中的选定项).我想出了如何将表单元素int作为数组参数传递给控制器??,这要感谢Robert Koritnik的.toDictionary()jQuer
我有以下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脚本.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读