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

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

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

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

您可以从控制器呈现视图,并将其与JSON对象一起返回给客户端。

如果您将使用我的简单帮助器将ActionResult呈现为字符串,那么您的代码将如下所示:

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

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

 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参数传递,然后在客户端上我读取参数并将其放入适当的容器中。 我很高兴能有这个工作。