将视图作为JSON对象的一部分返回

时间:2010-11-10 23:46:40

标签: asp.net-mvc ajax json jquery

我有一个只能一次加载完整视图的应用程序。我这样做的原因并不重要。重要的是,其余的内容只会在部分视图中回归。除了一些内容,我还有一些JSON对象,我希望在每次AJAX请求时来回传递服务器。

有没有办法以视图作为其属性之一返回JSON对象?这将是非常有用的并且可以节省带宽,因为我当前的解决方法是进行两次ajax调用,一次用于JSON,一次用于部分视图,这不仅需要更多时间和更多带宽,而且还需要两个单独的操作方法和服务器端的一些奇特的技巧。将视图序列化为JSON对象将解决我的所有问题。

实现这一目标的最佳方式是什么?这样做会有什么缺点(如果有的话)?

2 个答案:

答案 0 :(得分:3)

您可以从控制器渲染视图,并使用JSON对象将其返回给客户端。

如果您使用我的简单helper to render ActionResult to a string,那么您的代码将如下所示:

public JsonResult DoSomething() {
    var viewString = View().Capture(ControllerContext);
    return new JsonResult {
        JsonRequestBehavior = JsonRequestBehavior.AllowGet,
        Data = new {
            time = DateTime.Now,
            html = viewString
        }
    };
}

答案 1 :(得分:1)

这是一个有趣的代码似乎可以做我想要的,并保留我能说的模型绑定。

protected string RenderPartialViewToString(string viewName, object model)
{
     controller.ViewData.Model = model;

     using (StringWriter sw = new StringWriter())
     {
          ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(controller.ControllerContext, viewName);
          ViewContext viewContext = new ViewContext(controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, sw);
          viewResult.View.Render(viewContext, sw);

          return sw.GetStringBuilder().ToString();
     }
}

像魅力一样工作。我只是使用它并将字符串作为JSON参数传递,然后在客户端上我读取参数并将其放入适当的容器中。我很高兴能有这个工作。