2010-10-27 57 views
7

所以,如果有一個全球性的國家,一個MVC應用程序的每個視圖都需要呈現......例如:IsUserLoggedOnUserName ......將這些信息提供給每個視圖的適當方式是什麼?ASP.NET MVC:如何處理必須到每個視圖的模型數據?

據我所知,這部分視圖應該在母版頁或部分視圖中添加到其他視圖。但是,確保每次從所有相關控制器和操作中將「全局」模型數據傳遞給視圖的最好方法是什麼?

回答

6

詢問在此之後,我發現史蒂夫·桑德森這個好博客文章: http://blog.stevensanderson.com/2008/10/14/partial-requests-in-aspnet-mvc/

他建議三種不同的方法:

  • 使用控制器基類或ActionFilter每次相關模型添加到收藏ViewData[]。我認爲有幾個人已經提出了這樣的事情。

  • 在視圖中使用Html.RenderAction() ...和他說:

如果有人告訴你,內部 子請求是不好的,因爲它 「是不是MVC」,然後就咬他們立即在 的臉上。同時詢問他們 爲什麼他們仍然願意使用Ajax, 甚至<IMG>標籤, 這兩個都是 subrequest的形式。

  • 使用「部分請求」(他提供關於his blog此代碼),其允許一個控制器嵌套調用其他控制器成sortof嵌套ViewData結構。
+0

+1 RenderAction是要走的路。保持良好的SRP – redsquare 2010-10-28 06:21:17

3

codeulike - 看到答案了類似的問題在完全相同的時間要求,因爲這:

ASP.NET MVC displaying user name from a Profile

概括地說,主要打造了由所有其他控制器繼承了一個基本的控制器。基礎控制器則擁有一個覆蓋功能,可將所有「孩子」控制器傳送給所有人。而不是重複的代碼,看看我的回答以上,並給它一個嘗試..

歡呼聲......

2

你可以爲它包含信息共享視圖模型創建基類和繼承,對於每個視圖模型。

public class ViewModelBase 
{ 
    // shared data 
} 
public class Page1ViewModel : ViewModelBase 
{ 
    // page 1 data 
} 

在母版,您可以使用基類

Inherits="System.Web.Mvc.ViewMasterPage<ViewModelBase>" 

,並在每個視圖中使用這些派生類

Inherits="System.Web.Mvc.ViewPage<Page1ViewModel>" 
+0

對,但我該如何填充每次viewmodel?據推測與一個基地控制器,對吧? – codeulike 2010-10-27 19:17:08

+0

ViewModelBase構造函數/幫助器類/控制器基類 – 2010-10-27 19:22:31

相關問題