2010-11-10 79 views
1

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

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

什么是最好的方式来实现这一点,什么缺点(如果有的话)会这样做?

回答

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

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 
     } 
    }; 
} 
+0

我想也许你误会了。我想在一个返回JsonResult的操作方法中包含一个asp.net MVC partial view。就我所知,您不能只将ViewResult放入JsonResult中。你如何将视图转换为字符串并将其粘贴到jsonresult上? – Chev 2010-11-11 04:23:51

+0

我已经更新了答案。它应该适合你。我很感激我可以评价/分享我的博客文章,因为我专门回答了这个问题:) – 2010-11-11 06:09:17

+0

View()似乎没有一个名为Capture的方法。我找到了我需要的东西,并将其作为我自己问题的答案发布。谢谢您的帮助。 – Chev 2010-11-11 08:55:14

相关问题