2011-12-14 49 views
0

我在我的代码如下枚举:枚举呈现在MVC 3查看字符串表示

Public Enum UserSearchFields 
    LastName 
    FirstName 
    Email 
    UniqueID 
End Enum 

我尝试填充在与此枚举值视图中的下拉列表:

  <select id="search_type"> 
       <option value="@UserSearchFields.LastName" selected="selected">Last Name</option> 
       <option value="@UserSearchFields.FirstName">First Name</option> 
       <option value="@UserSearchFields.Email">E-mail</option> 
       <option value="@UserSearchFields.UniqueID">Unique ID</option> 
      </select> 

但由于某种原因,当呈现页面时,值字段包含枚举数的字符串表示形式,而不是基础的整数值。例如,选项值字段将是“LastName”而不是“0”...为什么会出现这种情况,我是否犯了某种错误?

P.S.我知道我可以从一个枚举器中填充一个下拉列表,如How do you create a dropdownlist from an enum in ASP.NET MVC?,但我只想知道为什么会发生这个问题?

+0

我会推荐让它保持原样!使用Enum中的“字符串”值是最佳推荐做法。另外,MVC会自动将该值正确地映射回您的模型。 – 2011-12-15 00:03:39

+1

另外,“Enum”是“Enumeration”的缩写,而不是“Enumerator”......在.NET中,区别很大,因此您可能想重新提出问题。 – 2011-12-15 00:05:06

回答

3

我认为你需要的枚举设置为一个数字,像这样:

Public Enum UserSearchFields 
    LastName = 0 
    FirstName = 1 
    Email = 2 
    UniqueID = 3 
End Enum 

即使这是一个不必要的步骤,您需要当你写出来像这样将它转换为int:

<select id="search_type" style="width: 100%;"> 
    <option value="@((int)SOLEPortal.UserSearchFields.LastName)" selected="selected">Last Name</option> 
    <option value="@(((int)SOLEPortal.UserSearchFields.FirstName)">First Name</option> 
    <option value="@((int)SOLEPortal.UserSearchFields.Email)">E-mail</option> 
    <option value="@((int)SOLEPortal.UserSearchFields.UniqueID)">Unique ID</option> 
</select> 

更好的方法是创建一个扩展方法,它自动从枚举中写出一个下拉列表,但这是一个很好的起点。