2009-08-05 99 views
1

對於ViewData,而不是使用字符串作爲鍵,我使用枚舉。我現在有一個大名單,可以從任何地方訪問。一些枚舉在多個Controller/View對中使用。有沒有更好的方法來對這些枚舉進行分類,而不僅僅是一個不斷增長的列表?ASP.NET MVC:枚舉和ViewData []鍵

我不喜歡硬編碼字符串是常見的ViewData。枚舉提供了極大的智能感知。我想過把控制器的枚舉分類。雖然這並不奏效,但因爲特定的枚舉值可能會在控制器之間共享,並且需要一些集中的位置。

回答

4

除了使用ViewData字典的,有你使用強類型的ViewModels考慮?

如果你有一個叫MyViewModel類,你可以從你的控制器來實現這個目的:

public ViewResult Index() 
{ 
    return this.View(new MyViewModel()); 
} 

MyViewModel可以是任何類型 - 它並不需要實現任何特定的接口或任何東西。然後,您可以在視圖中將所需的所有屬性添加到該類中。

您可以定義視圖根據您的視圖模型一個強類型查看。在你的.aspx文件,則需要更換此:本

Inherits="System.Web.Mvc.ViewPage" 

Inherits="System.Web.Mvc.ViewPage<MyViewModel>" 

這意味着,現在請你強類型從視圖訪問(包括智能感知)的視圖模型:

this.ViewData.Model.MyProperty 

我從來沒有使用ViewData字典,因爲這裏列出的另一種方法是強得多。

+0

正確,但如果我的控制器訪問2+模型類以獲取特定值,則不起作用。該視圖可以只鍵入一個類。 ViewData允許我從幾個類中取幾個值,並將它們發送到View,除了顯示值之外,它什麼也不做。 – 4thSpace 2009-08-05 14:05:23

+3

ViewModel應該支持View,所以它可以擁有你需要的任何屬性,並且可以像你想要的那樣複雜。數據來自何處無關 - 這是財務主任的責任。每個ViewModel都可以針對特定的視圖進行定製,因此您可以準確地提供它需要的數據。如果你想發送複雜的數據到視圖,只需創建一個新的ViewModel,將這些複雜的類作爲單獨的屬性。實際上不需要使用ViewData字典。 – 2009-08-05 18:04:12