任何人都可以詳細說明爲什麼要爲動態菜單等每個動作定義ViewData [「MenuData」]?ASP.NET MVC,部分視圖和數據
我有一個簡單的局部視圖呈現菜單,我從母版頁中呈現此菜單。這對於我從ASP.NET WebForms來說很直觀,但填充菜單的唯一方法是傳遞ViewData [「MenuData」],但是我必須在每個控制器操作中執行此操作。它確實感覺有點愚蠢,我不得不每次定義這個視圖數據。
就可測試性和ASP.NET MVC-ish而言,我應該如何處理這個問題?
任何人都可以詳細說明爲什麼要爲動態菜單等每個動作定義ViewData [「MenuData」]?ASP.NET MVC,部分視圖和數據
我有一個簡單的局部視圖呈現菜單,我從母版頁中呈現此菜單。這對於我從ASP.NET WebForms來說很直觀,但填充菜單的唯一方法是傳遞ViewData [「MenuData」],但是我必須在每個控制器操作中執行此操作。它確實感覺有點愚蠢,我不得不每次定義這個視圖數據。
就可測試性和ASP.NET MVC-ish而言,我應該如何處理這個問題?
另一種選擇是使用RenderAction
方法來代替這將調用一個動作(在當前控制器上,或者如果您提供了控制器名稱),然後可以爲您創建菜單數據,並調用您的ascx局部視圖:
因此,在我的母版頁我可以有:
<% Html.RenderAction("MenuArchiveList"); %>
然後在我的控制器:
public ActionResult MenuArchiveList() {
return PartialView("BlogArchiveList",
_BlogRepository.GetArchiveYearPostCounts());
}
這則成功地找到用戶控制\Views\Shared\BlogArchiveList.ascx
如果你想確保你的行動只會被調用的局部視圖的上下文,那麼你應該使用ChildActionOnlyAttribute
來裝飾它。
這是從「futures」命名空間Microsoft.Web.Mvc的版本2中的System.Web.Mvc中添加的。
您應該使用基本控制器負責處理您的視圖模型的反覆人口,然後讓所有的控制器能從中得到
這就是東西。謝謝。 – 2010-06-24 15:25:33
沒問題,很高興。 – 2010-06-24 15:31:07