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继承。