2011-12-14 48 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> 

更好的方法是創建一個擴展方法,它自動從枚舉中寫出一個下拉列表,但這是一個很好的起點。