将其他操作结果作为字符串返回

在我的MVC网站上,我正在创建一个小论坛。对于单个帖子,我在我的“PostController”中呈现我的“单(帖子后)”动作,如下所示
<% Html.RenderAction<PostController>(p => p.Single(comment)); %>
此外,当用户回复帖子时,我将回复作为ajax请求发送到我的“CreatePost”操作,然后返回“单个”视图作为此操作的结果,如下所示
public ActionResult CreatePostForForum(Post post)
{
    //Saving post to DB
    return View("Single", postViewData);
}
当我喜欢只渲染视图时,“单个”动作体中的代码不会被执行。 做这个的最好方式是什么? 另外我想在我的JsonObject中返回“Single”动作结果作为字符串,如下所示
return Json(new{IsSuccess = true; Content= /*HERE I NEED Single actions result*/});
    
已邀请:
你可以使用这样的东西,但要非常小心。它实际上可能导致严重的可跟踪错误(例如,当您忘记在Single方法中显式设置视图名称时)。
public ActionResult Single(PostModel model) {
    // it is important to explicitly define which view we should use
    return View("Single", model);
}

public ActionResult Create(PostModel model) {

    // .. save to database ..

    return Single(model);
}
更清洁的解决方案是做同样的事情,就像它是从标准形式发布 - 重定向(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:ASP MVC将内容视为JSON以呈现您的内容。 在ajax调用的OnSuccess处理程序中,检查IsSuccess是否为true。如果成功,则使用JQuery将内容附加到适当的容器     

要回复问题请先登录注册