Har*_*oon 5 jquery json asp.net-mvc-2
我想在我的json对象中返回html但是这似乎不起作用,我的代码:
return new JsonResult()
{
Data = new { Error = false, NewComment = PartialView("Review/InlineCommentUC", dto) }
};
Run Code Online (Sandbox Code Playgroud)
我希望NewComment里面有一些html ......
我以json格式接收(使用firebug)NewComment对象的是:
TempData = []
View = null,
ViewData = []
ViewEngineCollection = some data..
ViewName = name of view
Run Code Online (Sandbox Code Playgroud)
我使用Jquery将输出呈现到html上,发送回json对象的原因是,所以我可以很容易地处理我的错误.
理想情况下,我正在寻找自定义的 Action Result ...
是http://combftycodeblog.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)
});
Run Code Online (Sandbox Code Playgroud)
做这样的事情的能力将开启大量惊人的可能性,所以我真的在互联网上寻找解决方案.不幸的是,没有人似乎已经走到了它一个干净的解决方案,所以我挖成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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在你可以简单地这样做:
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!"
});
}
}
Run Code Online (Sandbox Code Playgroud)
另请注意,您可以通过以下小改动来修改这些函数以呈现View(而不是PartialView):
ViewEngineResult viewResult = ViewEngines.Engines.FindView(ControllerContext, viewName);
Run Code Online (Sandbox Code Playgroud)
请享用!