我想在我的json对象中返回html但是这似乎不起作用,我的代码:
return new JsonResult()
{
Data = new { Error = false, NewComment = PartialView("Review/InlineCommentUC", dto) }
};
我希望NewComment里面有一些HTML ...
我以json格式收到的NewComment对象(使用firebug)是:
TempData = []
View = null,
ViewData = []
ViewEngineCollection = some data..
ViewName = name of view
我使用Jquery将输出呈现到html上,发送回json对象的原因是,所以我可以很容易地处理我的错误。
理想情况下,自定义操作结果就是我要找的......
答案 0 :(得分:5)
http://craftycodeblog.com/2010/05/15/asp-net-mvc-render-partial-view-to-string/您要找的是什么?
我遇到过一种情况,我希望将一个部分视图呈现给字符串,然后将其作为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);
享受!
答案 1 :(得分:1)
PartialView
返回PartialViewResult
docs,这就是编码为JSON的内容。
关于如何将PartialView
呈现为字符串