Jquery$.ajax()调用将具有其他参数的关联数组传递给MVC控制器失败

Jquery $.ajax() call to pass associative array with other params to MVC controller failing

本文关键字:数组 关联 失败 控制器 MVC 参数 其他 ajax 调用 Jquery      更新时间:2023-09-26

我有一个通用调度器,它接收参数,然后生成$.ajax()正如您所看到的,我正在循环使用参数来构建数据。

function dispatch(controller, action, param1, param2,...) {
    var args = '', pg = 1, id = '';
    var l = arguments.length;
    var data = {};
    for (var i = 2; i < arguments.length; i += 2) {
        data[arguments[i]] = arguments[i + 1];
    }            
    $.ajax({
        type: "POST",
        url: "/" + (controller + "/" + action,
        data: data,
        dataType: "json",
        success: function (res) {
            alert('success');
        },
        error: function (xhr, status, error) {
            alert('error!');
        }
    });
}

这就是我的称呼:

dispatch("XYZ", "AddGuests", "id", 10, "name", "Bob");

一切都按预期进行,我将所有参数都放回了MVC 3控制器中。现在我需要将多维关联数组作为参数传递给我的控制器。我想使用我用于其他调用的单个通用调度程序。但不知怎么的,关联数组参数为null。

基本上,我想在控制器的List参数中发布一个guests数组。

准备关联数组数据的代码:

var guest = {};
var guests = [];
for(var i=0;i<2;i++){
  var name = GetName();
  var email = GetEmail();
  guest = { 'Email': email, 'Name': name };
  guests.push(guest);
}

循环结束时会给我,说:

{
 {'Email':"bob@zyz.com", 'Name':"Bob"},
 {'Email':"tom@zyz.com", 'Name':"Tom"}
}

这是对调度员的新呼叫:

dispatch("XYZ", "AddGuests", "id", 10, "guests", JSON.stringify(guests));

这是我的控制器:

[HttpPost]
public ActionResult AddGuests(string id, List<SelectedGuest> guests){
    //save guests
}
[Serializable]
public class SelectedGuest
{
    public string Email { get; set; }
    public string Name { get; set; }
}

当我查看httpfox时,我看到了发布的正确值:

id  10
guests  [{"Email":"bob@zyz.com","Name":"Bob"},{"Email":"tom@zyz.com","Name":"Tom"}]

如果我这样做,我会将客人正确地传递给我的管理员:但这限制了我只能传递guests数组,而不能传递其他参数。

data = JSON.stringify(guests);

我做错了什么?感谢阅读。

如果使用JSON.stringfy(guests)有效,为什么不将其与其他不需要字符串化的参数组合到另一个JSON对象中呢?

data = { "id": 10, "Guests": JSON.stringify(guests) };

或者,您可以构造一个javascript对象来组合这些对象,并在此基础上调用stringify。