MVC Return Partial View as JSON
有没有办法从MVC返回一个HTML字符串呈现部分作为JSON响应的一部分?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | public ActionResult ReturnSpecialJsonIfInvalid(AwesomenessModel model) { if (ModelState.IsValid) { if(Request.IsAjaxRequest() return PartialView("NotEvil", model); return View(model) } if(Request.IsAjaxRequest()) { return Json(new { error=true, message = PartialView("Evil",model)}); } return View(model); } |
您可以从PartialViewResult对象中提取html字符串,类似于此线程的答案:
将视图渲染为字符串
PartialViewResult和ViewResult都派生自ViewResultBase,因此同样的方法应该同时适用于两者。
使用上面的线程中的代码,您将能够使用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | public ActionResult ReturnSpecialJsonIfInvalid(AwesomenessModel model) { if (ModelState.IsValid) { if(Request.IsAjaxRequest()) return PartialView("NotEvil", model); return View(model) } if(Request.IsAjaxRequest()) { return Json(new { error = true, message = RenderViewToString(PartialView("Evil", model))}); } return View(model); } |
而不是
1 | return Json(new { Url = Url.Action("Evil", model) }); |
那么你可以在你的javascript中捕获结果并执行类似的操作
1 2 3 4 5 | success: function(data) { $.post(data.Url, function(partial) { $('#IdOfDivToUpdate').html(partial); }); } |
Url.Action("Evil", model)
将生成一个获取查询字符串,但您的ajax方法是post,它将抛出错误状态500(内部服务器错误)。 - Fereydoon Barikzehy 2月14日9:51
只需在Json对象上添加"JsonRequestBehavior.AllowGet"即可。