Đầu tiên tải về mã JavaScript này, JSON2.js, điều đó sẽ giúp chúng tôi tuần tự hóa đối tượng thành một chuỗi.
Trong ví dụ của tôi Tôi đăng các hàng của một jqGrid qua Ajax:
var commissions = new Array();
// Do several row data and do some push. In this example is just one push.
var rowData = $(GRID_AGENTS).getRowData(ids[i]);
commissions.push(rowData);
$.ajax({
type: "POST",
traditional: true,
url: '<%= Url.Content("~/") %>' + AREA + CONTROLLER + 'SubmitCommissions',
async: true,
data: JSON.stringify(commissions),
dataType: "json",
contentType: 'application/json; charset=utf-8',
success: function (data) {
if (data.Result) {
jQuery(GRID_AGENTS).trigger('reloadGrid');
}
else {
jAlert("A problem ocurred during updating", "Commissions Report");
}
}
});
Bây giờ trên bộ điều khiển:
[HttpPost]
[JsonFilter(Param = "commissions", JsonDataType = typeof(List<CommissionsJs>))]
public ActionResult SubmitCommissions(List<CommissionsJs> commissions)
{
var result = dosomething(commissions);
var jsonData = new
{
Result = true,
Message = "Success"
};
if (result < 1)
{
jsonData = new
{
Result = false,
Message = "Problem"
};
}
return Json(jsonData);
}
Tạo một Class JsonFilter (nhờ Công ty cổ phần tài liệu tham khảo).
public class JsonFilter : ActionFilterAttribute
{
public string Param { get; set; }
public Type JsonDataType { get; set; }
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (filterContext.HttpContext.Request.ContentType.Contains("application/json"))
{
string inputContent;
using (var sr = new StreamReader(filterContext.HttpContext.Request.InputStream))
{
inputContent = sr.ReadToEnd();
}
var result = JsonConvert.DeserializeObject(inputContent, JsonDataType);
filterContext.ActionParameters[Param] = result;
}
}
}
Tạo một lớp khác để bộ lọc có thể phân tích chuỗi JSON thành đối tượng có thể thao tác thực tế: Lớp học này là tất cả các hàng của jqGrid của tôi.
public class CommissionsJs
{
public string Amount { get; set; }
public string CheckNumber { get; set; }
public string Contract { get; set; }
public string DatePayed { get; set; }
public string DealerName { get; set; }
public string ID { get; set; }
public string IdAgentPayment { get; set; }
public string Notes { get; set; }
public string PaymentMethodName { get; set; }
public string RowNumber { get; set; }
public string AgentId { get; set; }
}
Tôi hy vọng ví dụ này giúp minh họa cách đăng đối tượng phức tạp.
Làm việc tốt ở đây! – jeffreypriebe
Có vẻ tuyệt vời - Bài đăng trên blog và liên kết mã thuộc tính tùy chỉnh không hoạt động nữa - bạn có thể đăng lại không? – littlechris
Giải pháp này yêu cầu thay đổi ở phía máy khách và phía máy chủ. Tôi biết bạn cần điều này từ lâu, nhưng tôi cũng có thể cung cấp một liên kết đến một cách tiếp cận khác, sử dụng một plugin jQuery đơn giản giúp chuyển đổi bất kỳ đối tượng Javascript nào thành dạng mà trình mô hình hóa mặc định hiểu và mô hình liên kết với các tham số. Không cần bộ lọc. http://erraticdev.blogspot.com/2010/12/sending-complex-json-objects-to-aspnet.html Tôi không biết cách bạn giải quyết các lỗi xác thực nhưng tôi cũng có giải pháp cho điều đó: http://erraticdev.blogspot.com/2010/11/handling-validation-errors-on-ajax.html –