2009-08-05 91 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