带枚举的Html.HiddenFor

时间:2011-07-05 10:08:01

标签: asp.net asp.net-mvc asp.net-mvc-3 razor

我认为我有以下内容:

@Html.HiddenFor(x => x.MeasurementUnitType)

MeasurementUnitType是一个枚举,如下所示:

public enum MeasurementUnitType
{
    Metric, Imperial
}

无论模型上的枚举发生什么,隐藏字段始终设置为公制。

我确实尝试过编辑模板:

@using Ns.Domain.Models.Enums
@model Ns.Domain.Models.Enums.MeasurementUnitType
@{
    switch (Model)
    {
        case MeasurementUnitType.Metric:
    <text>
    @Html.Hidden("Metric", ViewData.TemplateInfo.FormattedModelValue)
    </text>
break;
        case MeasurementUnitType.Imperial:
    <text>
    @Html.Hidden("Imperial", ViewData.TemplateInfo.FormattedModelValue)
    </text>
break;
        default:
throw new ArgumentOutOfRangeException();
    }
}

但是这会将隐藏字段输出为

 <input id="NewTable_MeasurementUnitType_Metric" name="NewTable.MeasurementUnitType.Metric" type="hidden" value="Metric" />

 <input id="NewTable_MeasurementUnitType_Imperial" name="NewTable.MeasurementUnitType.Metric" type="hidden" value="Imperial" />
分别

这不会起作用,因为Id具有枚举的实际值以及Id中枚举的名称...

有人有任何想法吗?

2 个答案:

答案 0 :(得分:2)

尝试这样做:

   @Html.Hidden(ViewData.ModelMetadata.PropertyName, 
     ViewData.TemplateInfo.FormattedModelValue)

然后你也可以在没有开关声明的情况下逃脱。

你可能也会明显违反明显的MVC错误(不是),在另一个SO上提到whereby MVC will use ValueProvider-provided values from a POST request if you re-render the view

答案 1 :(得分:0)