2010-11-10 74 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

相關問題