以下是一些可行的代码,因为我今天需要这样做.
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有一个强类型的视图模型
" %>