У меня есть общий диспетчер, который принимает параметры, а затем делает $ .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);
Что я делаю не так?Спасибо за чтение.