2011-05-09 77 views
3

我正在尋找幾個使用剃刀引擎更新MVC3中的部分區域的指針。更新部分區域MVC3

現在,我正在使用jQuery的ajax請求。

小上下文:我有一個「集合」列表,我在一個局部視圖中包裝,只是在所討論的視圖的模型對象的列表中執行for-each。

然後我有一個「添加集合」按鈕,只是顯示一個模式對話框,用於添加新集合的表單。單擊「添加」後,ajax請求會在數據庫中創建集合,並且當前返回一個JSON對象,指示成功以及字符串「Collection Created」。在我的jquery ajax處理程序中,我檢查此json對象,檢查狀態是否爲「成功」,然後使用jquery顯示類似「咆哮」的通知,包含「已創建集合」字符串。

現在我的問題是:無論如何,我可以更新我的收藏列表在這個Ajax請求?無論如何,我可以拋出部分視圖,迭代集合,以某種方式返回成功的json對象嗎?

很簡單:我想以某種方式更新HTML,但仍然保持JSON對象,所以我可以顯示我的通知。

+1

爲什麼不提出兩個請求內提交處理程序?這樣每個控制器的動作只會做一件事。 – frennky 2011-05-09 07:46:04

+0

對不起。你能詳細說一下嗎?你的意思是,在驗證創建請求的「成功」後,是否有「更新列表」-ajax請求? – Dynde 2011-05-09 07:49:07

+0

是的,每個請求可以調用不同的控制器動作(創建,列表)。 – frennky 2011-05-09 07:56:53

回答

1

您可以在提交處理程序中始終創建兩個ajax請求。每個請求都會調用不同的控制器操作(創建,列表)。

如果這不適合你,你有沒有考慮在部分內顯示成功消息?

1

是的,你可以渲染你的部分爲一個字符串,並將其包裝爲JSON。我使用這種方法很多,但我聽到有人說這是不好的做法。到目前爲止,我沒有遇到任何問題,我已經使用了幾年。

我實際上使用自定義的ActionResult返回JSON。它包裝多個視圖並以字符串數組的形式將它們發送回客戶端。 「不那麼直截了當」一點就是從控制器動作中將視圖呈現爲字符串。這裏有一些代碼要做到這一點:

public static string RenderViewToString(ControllerContext controllerContext, string viewPath, ViewDataDictionary viewData, TempDataDictionary tempData) 
    { 
     ViewEngineResult result = ViewEngines.Engines.FindPartialView(controllerContext, viewPath); 

     if (result == null || result.View == null) 
      throw new Exception("No view found for the following path: " + viewPath); 

     ViewContext viewContext = new ViewContext(controllerContext, result.View, viewData, tempData, new StringWriter()); 

     HtmlHelper helper = new HtmlHelper(viewContext, new ViewPage()); 

     return helper.Partial(viewPath, viewData).ToHtmlString(); 
    } 
+0

這也看起來很酷。我認爲第一種方法是正確的,因爲它只是一個額外的Ajax請求。但是如果我需要更新一個以上的區域,我可以看到自己將來會嘗試這種方法。我很想聽聽更多關於「不良做法」的含義和背後的推理,如果有人關心提供幾點建議? – Dynde 2011-05-09 11:51:22