Сбой вызова Jquery $ .ajax () для передачи ассоциативного массива с другими параметрами в контроллер MVC. - PullRequest
1 голос
/ 14 июня 2011

У меня есть общий диспетчер, который принимает параметры, а затем делает $ .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.Теперь мне нужно передать многомерный ассоциативный массив в качестве параметра моему контроллеру.Я хочу использовать один общий диспетчер, который я использую для других вызовов.Но каким-то образом я получаю нулевое значение для параметра ассоциативного массива.

В основном я хочу разместить массив гостей в параметре List моего контроллера.

Код для подготовки данных ассоциативного массива:

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"}]

Если я это делаю, я правильно передаю гостя моему контроллеру: но это ограничивает меня, чтобы пропустить только гостеймассив не другие параметры.

data = JSON.stringify(guests);

Что я делаю не так?Спасибо за чтение.

1 Ответ

0 голосов
/ 14 июня 2011

Если использование JSON.stringify (guest) работает, почему бы не объединить его в другой объект JSON с другими параметрами, не нуждающимися в строковом преобразовании?объединяет их и вызывает stringify для этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...