将复杂对象数组发送到MVC控制器的问题

时间:2012-12-09 15:23:54

标签: jquery ajax asp.net-mvc arrays controller

在这里使用fiddler是发布的数据:

first.Id=1&first.Value=This+is+my+first+name.&second.Id=2&second.Value=The+second+one.

在控制器上:

[HttpPost]
public void Set(EditSettings[] settings)
{
   //the settings is always null
}

我在这里尝试了很多问题,但没有一个有效!

因为我只有两个设置,我设法分离参数并在我的ajax post请求中使用一个falttened对象。

现在我的问题是应该将哪种类型的字符串传递给模型绑定器而不是我的初始字符串?那里应该改变什么,因为没有“第一个”或“第二个”参数名称?

2 个答案:

答案 0 :(得分:1)

您无法在控制器操作中使用数组访问这些值,因为它们没有使用index.u发送以下数据作为数组发送数据

$.ajax({
 url="Url For Action",
data = { data[0].Id : "0" ,  data[0].Value : "This is my first name" , data[1].Id : "1" ,  data[1].Value : "This is my second one"};
});
public void Set([DataBind(Prefix="data")] EditSettings[] settings)
{

}

答案 1 :(得分:0)

为什么发布查询字符串而不是JSON。如果我是你,我将使用JSON.stringify,它将是这样的:

var settings= new Array();
settings.push({ "id": "1", "value": "This+is+my+first+name." });

然后在你的JQuery ajax调用中执行以下操作:

$.ajax({
        url: 'You URL',
        type: 'POST',
        datatype: "json",
        traditional: true,
        data: { 
            settings: JSON.stringify(settings),          
        },
        success: function () { window.alert('success'); },
        error: function (event, request, settings) {  
            window.alert('AjaxError' + ' : ' + settings); },
        timeout: 20000
});