Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 在MVC 3视图中以字符串表示的枚举呈现_Asp.net Mvc_Asp.net Mvc 3 - Fatal编程技术网

Asp.net mvc 在MVC 3视图中以字符串表示的枚举呈现

Asp.net mvc 在MVC 3视图中以字符串表示的枚举呈现,asp.net-mvc,asp.net-mvc-3,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

我的代码中有以下枚举数:

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>

姓
名字
电子邮件
唯一ID
但由于某些原因,在呈现页面时,value字段包含枚举数的字符串表示形式,而不是底层整数值。例如,选项值字段将是“LastName”而不是“0”。。。为什么会这样?我是否犯了某种错误


另外,我知道我可以从枚举器中填充下拉列表,例如,但我只想知道为什么会出现此问题?

我认为您需要将枚举设置为如下数字:

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>

姓
名字
电子邮件
唯一ID

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

我认为您需要将枚举设置为如下所示的数字:

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>

姓
名字
电子邮件
唯一ID

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

设置explicit
enum
值是不必要的。这将导致与原始代码完全相同的枚举值。Scott,mccow002 answer的包括一个转换为int的转换,Marko需要这样做。我知道需要转换,但我不确定是否要显式设置枚举值。所以,马尔科,你不必这么做:)谢谢你的回答,我知道我可以运用这些价值观,但我不明白为什么。。。枚举数的基础类型是integer,我在其他任何地方都使用枚举数,例如在控制器逻辑中,它们与基础类型无关。事实上,如果需要获取字符串值,则必须特别使用ToString()方法。为什么视图会自动呈现为字符串是我试图理解的…视图希望所有内容都是字符串,所以它自动调用ToString是有意义的。NET中的每个对象都有一个ToString()方法-您可以保证得到一些东西。但是,在大多数情况下,强制转换为int将导致强制转换异常。视图引擎可能只是将所有内容都视为一个对象,以避免引发异常-因此您得到的是ToString(),而不是(int)。设置显式
Enum
值是不必要的。这将导致与原始代码完全相同的枚举值。Scott,mccow002 answer的包括一个转换为int的转换,Marko需要这样做。我知道需要转换,但我不确定是否要显式设置枚举值。所以,马尔科,你不必这么做:)谢谢你的回答,我知道我可以运用这些价值观,但我不明白为什么。。。枚举数的基础类型是integer,我在其他任何地方都使用枚举数,例如在控制器逻辑中,它们与基础类型无关。事实上,如果需要获取字符串值,则必须特别使用ToString()方法。为什么视图会自动呈现为字符串是我试图理解的…视图希望所有内容都是字符串,所以它自动调用ToString是有意义的。NET中的每个对象都有一个ToString()方法-您可以保证得到一些东西。但是,在大多数情况下,强制转换为int将导致强制转换异常。视图引擎可能只是将所有内容都视为一个对象,以避免引发异常-因此您可以使用ToString()而不是(int)。我建议您保持原样!建议最好使用枚举中的“字符串”值。另外,MVC将自动将该值正确地“映射”回您的模型。。。在.NET中,差异是显著的,所以您可能需要重新表述您的问题。斯科特提出的观点和标题已经确定。。。谢谢我建议保持原样!建议最好使用枚举中的“字符串”值。另外,MVC将自动将该值正确地“映射”回您的模型。。。在.NET中,差异是显著的,所以您可能需要重新表述您的问题。斯科特提出的观点和标题已经确定。。。谢谢