枚举呈现为MVC 3视图中的字符串表示

时间:2011-12-14 22:37:41

标签: asp.net-mvc asp.net-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>

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

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

1 个答案:

答案 0 :(得分: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>

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