C# 具有枚举的MVC3 HiddenFor。输入';s值是枚举键不是值?
我有一个枚举:C# 具有枚举的MVC3 HiddenFor。输入';s值是枚举键不是值?,c#,asp.net-mvc-3,enums,C#,Asp.net Mvc 3,Enums,我有一个枚举: public enum TaskType { None = 100, Install = 101, Decommission = 102, Modify = 103, Rename = 104, Move = 105, Incident = 106, Other = 107 }; 我希望通过将其保存为我的模型的属性,在我的视图中表示其当前值: public class ProvisioningListModel {
public enum TaskType
{
None = 100,
Install = 101,
Decommission = 102,
Modify = 103,
Rename = 104,
Move = 105,
Incident = 106,
Other = 107
};
我希望通过将其保存为我的模型的属性,在我的视图中表示其当前值:
public class ProvisioningListModel
{
public TaskType TaskType { get; set; }
public ProvisioningListModel(Task task)
{
TaskType = task.TaskType;
}
}
我的看法是:
<%=Html.HiddenFor(model => model.TaskType)%>
model.TaskType)%%>
当生成适当的隐藏输入元素时,它的值是“Install”而不是“101”。这对我来说似乎很奇怪,因为枚举通常由它们的值而不是它们的键来处理
<input id="TaskType" name="TaskType" type="hidden" value="Install">
这是MVC中的常见问题吗?有一个简单的解决方法吗?首先让您的枚举类型从int继承
public enum TaskType :int
{
...
然后简单地使用
<%=Html.HiddenFor(model => (int)model.TaskType)%>
(int)model.TaskType)%%>
但我必须在视图中回溯到TaskType,当我在控制器中收到模型时,我必须再次进行转换?从编程的角度了解为什么会这样吗?当我们必须决定保存一个或另一个时,枚举的键似乎远不如它的值有用。对MVC的设计决策有点震惊。@SeanAnderson枚举很有用,因为枚举值可以改变,但键不能改变。即使您更改了枚举值,也不需要重写逻辑。我不得不拒绝您的答案,因为它会引发异常。您不能这样强制转换,至少在没有razr语法的MVC3中是这样。@SeanAnderson抱歉Sean我忘了警告您,为了避免强制转换异常,您必须使枚举类型从int继承。