JQuery mã:đèo đối tượng nhiều JSON để phương pháp hành động 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 Mã (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; }
}
Bây giờ vấn đề là, tôi không thể làm cho nó làm việc bằng cách đi qua "CategoryMode "," ProductModel "vào phương thức hành động" ModelTwo ". Bài đăng JQuery xác định chính xác phương thức hành động "ModelTwo" nhưng giá trị thuộc tính "cat", "prd" không có giá trị. "CategoryID", "CategoryName", "ProductID", "ProductName" đều là null mặc dù nhấn phương thức đó.
//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); } }); });
Vì vậy, có gì sai với lời gọi JQuery đầu tiên của tôi đối với phương thức hành động "ModelTwo"?
Tôi đã dành rất nhiều thời gian để tìm hiểu điều này, nhưng không chắc chắn điều gì đang xảy ra. Không có vấn đề gì với định tuyến ở đây vì tôi có thể truy cập đúng phương thức hành động ...
Bất kỳ trợ giúp nào sẽ được đánh giá cao.
Cảm ơn!
Điều này thật tuyệt vời !!!!!! Nó đã làm việc. Nó đã làm việc tốt mà không có "ContentType" thiết lập cho phiên bản tham số duy nhất, nhưng tăng gấp đôi. Thay đổi duy nhất tôi phải thực hiện là làm cho việc xâu chuỗi dữ liệu được truyền đi như bạn đã đề cập thay vì toàn bộ mô hình chính nó "JSON.stringify ({cat: CategoryModel, prd: ProductModel})" đã giúp rất nhiều. Bạn đã làm Darin ngày của tôi! Cảm ơn bạn rất nhiều! –
Tôi đã làm cho nó hoạt động bằng cách có một lớp bao bọc có "get set" của Category và Product class. Nó đã được làm việc tốt cho phiên bản tham số duy nhất nhưng khi tôi vượt qua hai tham số. Nhưng dù sao, đề xuất của bạn đã giúp, tôi đã phải thêm contentType để là json cho hai phương thức hành động được tham số hóa. Cảm ơn bạn! –
Tính năng này có hoạt động trong Firefox không? Nó hoạt động trong IE tốt nhưng firefox. Nó không phải là đích trong bộ điều khiển hành động, khi tôi sử dụng fiddler để tìm hiểu dữ liệu nào đang được chuyển tới bộ điều khiển, chỉ cần để trống. BTW, phương pháp hành động điều khiển của tôi nằm trong các dự án khác nhau, do đó, nó được đăng qua miền. Nó hoạt động tốt miễn là phương thức hành động có một tham số nhưng hai tham số. Đã xảy ra sự cố khi truyền dữ liệu đến miền điều khiển chéo. –