【问题标题】:Html.HiddenFor with enum带有枚举的 Html.HiddenFor
【发布时间】:2011-07-05 10:08:00
【问题描述】:

我的观点如下:

@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 中枚举的名称...

有人有什么想法吗?

【问题讨论】:

  • 对于您的第二个示例,您不能将与第一个参数相同的值传递给Html.Hidden 吗?从而保持隐藏的 ID 相同
  • 是的 - 现在就这样做 - 虽然不会解决问题吗?
  • 不……没用……头疼……
  • 是的,应该可以 - 尽管您可能想使用 ViewData.ModelMetadata.PropertyName
  • 那行得通 :) 将其放入答案中,我会将其标记为正确,以便将来我寻找相同的答案

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


【解决方案1】:

尝试这样做:

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

然后你也可以不使用 switch 语句。

您可能还遇到了另一个 SO whereby MVC will use ValueProvider-provided values from a POST request if you re-render the view 中提到的明显 MVC 错误(不是)。

【讨论】:

  • 是的 - 删除了开关 - 工作一种享受..简单干净
  • model binder 不喜欢它——我认为是因为它提交的只是“Imperial”而不是“MeasurementunitType.Imperial”......不过这是另一个问题
【解决方案2】:

【讨论】:

  • 所以,呃。这如何解决枚举值的名称在隐藏字段中呈现的问题,而不是底层整数,这就是为什么他在 POST 上得到不正确的值的原因?
  • 链接已过期。该页面上不再有任何带有名为“Samples/MVC/EnumSample/”的锚点。
  • 你可以在这里找到它 (github.com/aspnet/samples/tree/master/samples/aspnet/MVC/…),但我认为它没有解决 OP 问题
猜你喜欢
  • 1970-01-01
  • 2020-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多