所以,如果有一個全球性的國家,一個MVC應用程序的每個視圖都需要呈現......例如:IsUserLoggedOn
和UserName
......將這些信息提供給每個視圖的適當方式是什麼?ASP.NET MVC:如何處理必須到每個視圖的模型數據?
據我所知,這部分視圖應該在母版頁或部分視圖中添加到其他視圖。但是,確保每次從所有相關控制器和操作中將「全局」模型數據傳遞給視圖的最好方法是什麼?
所以,如果有一個全球性的國家,一個MVC應用程序的每個視圖都需要呈現......例如:IsUserLoggedOn
和UserName
......將這些信息提供給每個視圖的適當方式是什麼?ASP.NET MVC:如何處理必須到每個視圖的模型數據?
據我所知,這部分視圖應該在母版頁或部分視圖中添加到其他視圖。但是,確保每次從所有相關控制器和操作中將「全局」模型數據傳遞給視圖的最好方法是什麼?
詢問在此之後,我發現史蒂夫·桑德森這個好博客文章: http://blog.stevensanderson.com/2008/10/14/partial-requests-in-aspnet-mvc/
他建議三種不同的方法:
使用控制器基類或ActionFilter每次相關模型添加到收藏ViewData[]
。我認爲有幾個人已經提出了這樣的事情。
在視圖中使用Html.RenderAction()
...和他說:
如果有人告訴你,內部 子請求是不好的,因爲它 「是不是MVC」,然後就咬他們立即在 的臉上。同時詢問他們 爲什麼他們仍然願意使用Ajax, 甚至
<IMG>
標籤, 這兩個都是 subrequest的形式。
ViewData
結構。codeulike - 看到答案了類似的問題在完全相同的時間要求,因爲這:
ASP.NET MVC displaying user name from a Profile
概括地說,主要打造了由所有其他控制器繼承了一個基本的控制器。基礎控制器則擁有一個覆蓋功能,可將所有「孩子」控制器傳送給所有人。而不是重複的代碼,看看我的回答以上,並給它一個嘗試..
歡呼聲......
你可以爲它包含信息共享視圖模型創建基類和繼承,對於每個視圖模型。
public class ViewModelBase
{
// shared data
}
public class Page1ViewModel : ViewModelBase
{
// page 1 data
}
在母版,您可以使用基類
Inherits="System.Web.Mvc.ViewMasterPage<ViewModelBase>"
,並在每個視圖中使用這些派生類
Inherits="System.Web.Mvc.ViewPage<Page1ViewModel>"
對,但我該如何填充每次viewmodel?據推測與一個基地控制器,對吧? – codeulike 2010-10-27 19:17:08
ViewModelBase構造函數/幫助器類/控制器基類 – 2010-10-27 19:22:31
+1 RenderAction是要走的路。保持良好的SRP – redsquare 2010-10-28 06:21:17