Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 以字符串形式返回其他操作结果_Asp.net Mvc 3_Jsonresult - Fatal编程技术网

Asp.net mvc 3 以字符串形式返回其他操作结果

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

在我的MVC网站上,我正在创建一个小论坛。对于单个帖子,我在我的“PostController”中呈现我的“single(post-post)”操作,如下所示

<% 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将内容附加到适当的容器中