【问题标题】:MVC3 HiddenFor with Enum. Input's value is enum key not value?带有枚举的 MVC3 HiddenFor。输入的值是枚举键而不是值?
【发布时间】:2013-07-12 21:51:52
【问题描述】:

我有一个枚举:

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)%>

当生成适当的隐藏输入元素时,其值为“Install”而不是“101”。这让我感到惊讶,因为枚举通常由它们的值而不是它们的键来处理。

<input id="TaskType" name="TaskType" type="hidden" value="Install">

这是 MVC 中的常见问题吗?有简单的解决方法吗?

【问题讨论】:

    标签: c# asp.net-mvc-3 enums


    【解决方案1】:

    首先让你的枚举类型继承自 int

    public enum TaskType :int
    {
      ...
    

    然后简单地使用

    <%=Html.HiddenFor(model => (int)model.TaskType)%>
    

    【讨论】:

    • 但是我必须在我的视图中转换回 TaskType,当我在控制器中收到我的模型时,我必须再次转换?
    • 从程序化的角度来看为什么会这样?当我们必须决定保存一个或另一个时,枚举的键似乎远不如它的值有用。只是对 MVC 的设计决策有点震惊。
    • @SeanAnderson Enums 很有用,因为您的枚举值可能会有所不同,但键不会有所不同。即使你改变了你的枚举值,你也不需要重写逻辑。
    • 我不得不不接受您的回答,因为它会引发异常。你不能那样投射,至少在没有 razr 语法的 MVC3 中不能。
    • @SeanAnderson 对不起,肖恩,我忘了警告你,你必须让你的枚举类型继承自 int 以避免强制转换异常。
    猜你喜欢
    • 1970-01-01
    • 2015-12-13
    • 1970-01-01
    • 1970-01-01
    • 2020-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多