jQuery 和 ASP.NET MVC:使用 JSON 发布复杂对象数组
问题:
如何将一组复杂对象从 ASP.NET MVC 控制器传递到jQuery AJAX 请求?控制器操作应该接受哪些参数?
解决方案:
要使用 jQuery 和 JSON 将复杂对象数组发布到控制器,请按照以下步骤操作:
将数组序列化为JSON:
使用 JSON.stringify() 将对象数组转换为 JSON 字符串。
设置请求标头:
指定Content-Type header为application/json; charset=utf-8.
使用 $.ajax() 方法:
使用 $.ajax() 创建 AJAX 请求方法并提供 JSON 数据作为数据
控制器操作:
使用自定义属性 (JsonFilter) 装饰控制器操作以反序列化 JSON 数据。该属性应指定参数名称和 JSON 数据类型。
自定义属性(JsonFilter):
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; } } }
示例:
JavaScript:
function getplaceholders() { var widgets = []; // ... populate the array $.ajax({ url: '/portal/Designer.mvc/SaveOrUpdate', type: 'POST', dataType: 'json', data: JSON.stringify(widgets), contentType: 'application/json; charset=utf-8' }); }
控制器操作:
[JsonFilter(Param = "widgets", JsonDataType = typeof(List<PageDesignWidget>))] public JsonResult SaveOrUpdate(List<PageDesignWidget> widgets) { // ... }
以上是如何使用 JSON 将复杂对象数组从 jQuery 发布到 ASP.NET MVC 控制器?的详细内容。更多信息请关注PHP中文网其他相关文章!