2010-05-25 100 views
4

我想知道什麼是向視圖(或主視圖)提供上下文(即與任何特定視圖無關,但同時與所有視圖無關)信息的最佳方式頁)?將上下文信息傳遞給ASP.NET MVC中的視圖

請考慮以下情況。

假設我們有一個支持多種UI語言的應用程序。用戶可以通過UI的小部件(如頁面頂部的標籤)切換它們。每種語言都作爲一個單獨的選項卡呈現。不應呈現當前語言的選項卡。

爲了解決這些要求,我打算在客戶端上隱藏當前的語言選項卡。爲此,我需要客戶端上當前的語言選項卡標識。所以,我需要一些方法將Id傳遞給master頁面(爲了將它融合到js腳本中)。

我能想到的最好的事情是,我所有的ViewModel都應該繼承一些ViewModeBase,它有一個字段來存放當前語言標籤ID。然後,無論我要呈現的視圖如何,該ID始終可用於主頁的隱藏腳本。

不過,我擔心這ViewModelBase可以以不受控制的方式可能成長爲這樣的片段上下文信息(如當前的語言)將增長數..

任何想法?

回答

1

如果所有視圖都需要此上下文信息,那麼擁有基本視圖模型似乎是一個很好的解決方案。問題是在哪裏填充此信息以避免混淆所有控制器操作。 A custom action filter看起來像個好地方。在OnActionExecuted方法中,您可以獲取由控制器操作返回的視圖模型,並在來自基本類型的情況下填充上下文部分。

另一種選擇是將上下文信息放入ViewData(強類型視圖也可以使用ViewData),但是我個人討厭使用魔術字符串並在我的視圖中進行投射(這可以通過使用HTML助手來解決ViewData的)。

+0

感謝您的回答! 爲了避免控制器混亂,我通過工廠創建了我的視圖模型。所以,工廠負責填充ViewModelBase的屬性。 – Ant 2010-05-25 07:32:23

0

如果您認爲ViewModeBase會增長太多,您也可以讓viewmodels實現一個接口。

View或Partial可以具有該接口的類型。 如果只有一些頁面具有這種功能,那特別有用。

+0

我明白你的觀點。謝謝。 但我只是有一種直覺,認爲有更好的解決方案:) 此外,我不記得確切是誰,但有人從MVC團隊我猜在一個博客中說,有ViewModelBase爲這些目的不是一件好事。 。 – Ant 2010-05-25 11:17:05

相關問題