我有一个MVC应用程序与相当多的控制器操作,使用Ajax(jQuery)调用并返回部分视图内容更新屏幕的一部分。但我宁愿做的是返回JSON这样的东西。
return Json(new { Result = true,Message = "Item has been saved",Content = View("Partial") });
哪里的HTML只是Json的一个财产。这意味着我需要检索由View方法呈现的HTML。有没有任何简单的方法来做到这一点,我看到的几个例子是相当复杂的。
编辑:这个问题最初是为ASP.NET MVC 1,但是如果版本2使我更容易听到这个答案。
解决方法
这是答案!这是从
Martin From’s方法轻微的变化,似乎工作。如果有缺失的东西,人们可以在评论部分提供任何代码更改。谢谢。
从你的控制器调用如下:
string HTMLOutput = Utils.RenderPartialToString("~/Views/Setting/IndexMain.ascx","",items,this.ControllerContext.RequestContext);
将其添加到类中
public static string RenderPartialToString(string controlName,object viewData,object model,System.Web.Routing.RequestContext viewContext) { ViewDataDictionary vd = new ViewDataDictionary(viewData); ViewPage vp = new ViewPage { ViewData = vd }; vp.ViewData = vd; vp.ViewData.Model = model; vp.ViewContext = new ViewContext(); vp.Url = new UrlHelper(viewContext); Control control = vp.LoadControl(controlName); vp.Controls.Add(control); StringBuilder sb = new StringBuilder(); using (StringWriter sw = new StringWriter(sb)) using (HtmlTextWriter tw = new HtmlTextWriter(sw)) { vp.RenderControl(tw); } return sb.ToString(); }