你是否需要的是这个链接提供的内容:http://craftycodeblog.com/2010/05/15/asp-net-mvc-render-partial-view-to-string/?
使用 WayBackMachine 复制。
我遇到了这样一种情况:我想将一个部分视图渲染成字符串,然后作为 JSON 响应的一部分返回,如下所示:
return Json(new {
statusCode = 1,
statusMessage = "The person has been added!",
personHtml = PartialView("Person", person)
});
实现这样的功能将会开启大量惊人的可能性,所以我在网上搜索解决方案。不幸的是,似乎没有人提出一个干净的解决方案,所以我深入研究了MVC代码并提出了一个解决方案......因为我是个好人,你可以免费复制它。 ;)
public abstract class MyBaseController : Controller {
protected string RenderPartialViewToString()
{
return RenderPartialViewToString(null, null);
}
protected string RenderPartialViewToString(string viewName)
{
return RenderPartialViewToString(viewName, null);
}
protected string RenderPartialViewToString(object model)
{
return RenderPartialViewToString(null, model);
}
protected string RenderPartialViewToString(string viewName, object model)
{
if (string.IsNullOrEmpty(viewName))
viewName = ControllerContext.RouteData.GetRequiredString("action");
ViewData.Model = model;
using (StringWriter sw = new StringWriter()) {
ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
ViewContext viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
viewResult.View.Render(viewContext, sw);
return sw.GetStringBuilder().ToString();
}
}
}
现在你可以简单地这样做:
public class MyController : MyBaseController {
public ActionResult CreatePerson(Person p) {
if (ModelState.IsValid) {
try {
PersonRepository.Create(p);
return Json(new {
statusCode = 1,
statusMessage = "The person has been added!",
personHtml = RenderPartialViewToString("Person", p)
});
}
catch (Exception ex) {
return Json(new {
statusCode = 0,
statusMessage = "Error: " + ex.Message
});
}
}
else
return Json(new {
statusCode = 0,
statusMessage = "Invalid data!"
});
}
}
还要注意,您可以通过进行小改动来修改这些函数,以呈现视图(而不是PartialView):
ViewEngineResult viewResult = ViewEngines.Engines.FindView(ControllerContext, viewName);
享受!