Asp.net mvc 3 以字符串形式返回其他操作结果
在我的MVC网站上,我正在创建一个小论坛。对于单个帖子,我在我的“PostController”中呈现我的“single(post-post)”操作,如下所示Asp.net mvc 3 以字符串形式返回其他操作结果,asp.net-mvc-3,jsonresult,Asp.net Mvc 3,Jsonresult,在我的MVC网站上,我正在创建一个小论坛。对于单个帖子,我在我的“PostController”中呈现我的“single(post-post)”操作,如下所示 <% Html.RenderAction<PostController>(p => p.Single(comment)); %> public ActionResult CreatePostForForum(Post post) { //Saving post to DB return Vi
<% Html.RenderAction<PostController>(p => p.Single(comment)); %>
public ActionResult CreatePostForForum(Post post)
{
//Saving post to DB
return View("Single", postViewData);
}
return Json(new{IsSuccess = true; Content= /*HERE I NEED Single actions result*/});
当我喜欢只渲染视图时,“单个”动作体中的代码不会被执行
最好的方法是什么
另外,我想在JsonObject中以字符串形式返回“Single”操作结果,如下所示
<% Html.RenderAction<PostController>(p => p.Single(comment)); %>
public ActionResult CreatePostForForum(Post post)
{
//Saving post to DB
return View("Single", postViewData);
}
return Json(new{IsSuccess = true; Content= /*HERE I NEED Single actions result*/});
你可以用这样的东西,但要非常小心。它实际上可能会导致严重的可跟踪错误(例如,当您忘记在单个方法中显式设置视图名称时) 更干净的解决方案是,像从标准表单-重定向(XMLHttpRequest将跟随它)发布一样执行 为了返回json包装的ajax视图,我使用以下类
public class AjaxViewResult : ViewResult
{
public AjaxViewResult()
{
}
public override void ExecuteResult(ControllerContext context)
{
if (!context.HttpContext.Request.IsAjaxRequest())
{
base.ExecuteResult(context);
return;
}
var response = context.HttpContext.Response;
response.ContentType = "application/json";
using (var writer = new StringWriter())
{
var oldWriter = response.Output;
response.Output = writer;
try
{
base.ExecuteResult(context);
}
finally
{
response.Output = oldWriter;
}
JavaScriptSerializer serializer = new JavaScriptSerializer();
response.Write(serializer.Serialize(new
{
action = "replace",
html = writer.ToString()
}));
}
}
}
这可能不是最好的解决方案,但效果相当不错。请注意,您需要手动设置View、ViewData.Model、ViewData、MasterName和TempData属性。我的建议:
- 通过Ajax发布论坛回复(以及任何选项)
- 返回JSONResult,使用以下方法:呈现内容
- 在ajax调用的OnSuccess处理程序中,检查IsSuccess是否为true。如果成功,请使用JQuery将内容附加到适当的容器中