我很高兴从ASP.NET中的控制器返回JsonResult对象或部分ASP.NET视图.
我想将呈现的局部视图作为JSON对象中的属性返回.例如
请求
/post/detail/1
会回来的
{"PostId": 1,"Html": "<p>some markup rendered from a partial to inject</p>" }
解决方法
以下是一些可行的代码,因为我今天需要这样做.
The original code is described here.
public static string RenderPartialToString(string controlName,object viewData) { var viewContext = new ViewContext(); var urlHelper = new UrlHelper(viewContext.RequestContext); var viewDataDictionary = new ViewDataDictionary(viewData); var viewPage = new ViewPage { ViewData = viewDataDictionary,ViewContext = viewContext,Url = urlHelper }; var control = viewPage.LoadControl(controlName); viewPage.Controls.Add(control); var sb = new StringBuilder(); using (var sw = new StringWriter(sb)) using (var tw = new HtmlTextWriter(sw)) { viewPage.RenderControl(tw); } return sb.ToString(); }
然后,您可以使用它来执行RJS样式的json结果
public virtual ActionResult Index() { var jsonResult = new JsonResult { Data = new { main_content = RenderPartialToString("~/Views/contact/MyPartial.ascx",new SomeObject()),secondary_content = RenderPartialToString("~/Views/contact/MyPartial.ascx",} }; return Json(jsonResult,JsonRequestBehavior.AllowGet); }
而partial有一个强类型的视图模型
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<SomeObject>" %> <h1>My Partial</h1>