JQuery код:Пасс нескольких объектов JSON в MVC3 метод действия
//This passes NULL for "CategoryID", "CategoryName", "ProductID", "ProductName" $("#btnPost").click(function() { var CategoryModel = { CategoryID: 1, CategoryName: "Beverage" }; var ProductModel = { ProductID: 1, ProductName: "Chai" }; var data1 = {}; data1["cat"] = CategoryModel; data1["prd"] = ProductModel; var jsonData = JSON.stringify(data1); $.ajax({ url: url + '/Complex/ModelTwo', //This works but property values are null type: 'post', dataType: 'json', data: { "cat": CategoryModel, "prd": ProductModel }, //jsonData, cache: false, success: function (result) { alert(result); }, error: function (xhr, ajaxOptions, thrownError) { alert(thrownError); } }); });
MVC код (C#):
public class ComplexController : Controller
{
public string ModelOne(Category cat)
{
return "this took single model...";
}
public string ModelTwo(Category cat, Product prd)
{
return "this took multiple model...";
}
}
public class Category
{
public int CategoryID { get; set; }
public string CategoryName { get; set; }
}
public class Product
{
public int ProductID { get; set; }
public string ProductName { get; set; }
}
Теперь проблема, я не мог получить его работу, передавая «CategoryMode »,« ProductModel »в метод действия« ModelTwo ». Сообщение JQuery правильно идентифицирует метод действия «ModelTwo», но значения свойств «cat», «prd» равны null. «CategoryID», «CategoryName», «ProductID», «ProductName» все являются нулевыми, несмотря на то, что они ударили этот метод.
//THIS ONE WORKS FINE... $("#btnPost").click(function() { var CategoryModel = { CategoryID: 1, CategoryName: "Beverage" }; var ProductModel = { ProductID: 1, ProductName: "Chai" }; var data1 = {}; data1["cat"] = CategoryModel; data1["prd"] = ProductModel; var jsonData = JSON.stringify(data1); $.ajax({ url: url + '/Complex/ModelOne', //This works type: 'post', dataType: 'json', data: CategoryModel, cache: false, success: function (result) { alert(result); }, error: function (xhr, ajaxOptions, thrownError) { alert(thrownError); } }); });
Так что же случилось с моим первым вызовом JQuery к методу действий «ModelTwo»?
Я потратил много времени на это, но не уверен, что происходит. Здесь нет проблемы с маршрутизацией, потому что я могу приземлиться по правильному методу ...
Любая помощь будет принята с благодарностью.
Спасибо!
Это замечательно !!!!!! Это сработало. Он работал очень хорошо БЕЗ настройки ContentType для версии с одним параметром, но двойной. Единственное изменение, которое я должен был сделать, это сделать стробирование на передаваемых данных, как вы упомянули, вместо всей модели самой «JSON.stringify ({cat: CategoryModel, prd: ProductModel})» помогло много. Ты сделал мой день Дариным! Спасибо огромное! –
Я получил его, работая с классом-оболочкой, который «получил набор» категории и класса Product. Он работал отлично для версии с одним параметром, но когда я передаю два параметра. Но в любом случае, ваше предложение помогло, мне пришлось добавить contentType для json для двух параметризованных методов действий. Спасибо! –
Работает ли это в Firefox? Он работает в IE просто отлично, но firefox. Он не приземляется в контроллере действий, когда я использовал скрипача, чтобы узнать, какие данные передаются контроллеру, просто пустым. BTW, мой метод действия контроллера находится в другом проекте, поэтому это перекрестная регистрация домена. Он работает просто отлично, пока метод действия принимает один параметр, но два. Что-то не так в передаче данных в кросс-домен контроллера. –