Html.HiddenFor с перечислением - PullRequest
2 голосов
/ 05 июля 2011

У меня есть следующее на мой взгляд:

@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 имеет действительное значение перечисления, а также имя перечисления в идентификаторе ...

У кого-нибудь есть идеи?

Ответы [ 2 ]

2 голосов
/ 05 июля 2011

Попробуйте сделать это так:

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

В таком случае вы также можете обойтись без оператора switch.

Возможно, вы также ошиблись очевидной ошибкой MVC (которой нет), упомянутой в другом SO, , при которой MVC будет использовать значения, предоставленные ValueProvider из запроса POST, если вы повторно визуализируете представление .

0 голосов
/ 09 января 2014

Это теперь поддерживается из коробки в mvc5

https://aspnet.codeplex.com/SourceControl/latest#Samples/MVC/EnumSample/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...