MVC3 Html.HiddenFor (Model => Model.Id) не возвращается обратно в контроллер - PullRequest
15 голосов
/ 26 сентября 2011

Я создал строго типизированное представление Razor MVC3, используя код скаффолдинга.

Модель представляет собой POCO с базовым типом PersistentEntity, который определяет свойство с именами Created, updated и Id.

Идентификатор - int, Создано и Обновлено - DateTime.

Я использую Html.HiddenFor для создания скрытого поля в представлении.

@Html.HiddenFor(model => model.Id)
@Html.HiddenFor(model => model.Created)
@Html.HiddenFor(model => model.Updated)

На странице скрытыйвход отображается правильно, с Id, установленным в значение.

<input data-val="true" data-val-number="The field Id must be a number." data-val-required="The Id field is required." id="Id" name="Id" type="hidden" value="12">

Однако, когда страница передается в контроллер [HttpPost]Edit(Model model), свойство Id всегда равно 0. Созданные и обновленные правильно заполненызначения из представления.

enter image description here

Это должно быть 12 в случае примера в этом посте.Что не так?


Мне известно, что я могу изменить сигнатуру метода на [HttpPost]Edit(int personID, Person model), поскольку personID находится в строке получения, однако, почему модель не заполняется скрытым полем?


Обновление

Проблема заключалась в том, что установщик на PersistentEntity был защищен, ASP не смог установить свойство и проглотил его.Изменение этого параметра на общедоступное решило проблему.

public abstract class PersistentEntity
{
    public virtual int Id { get; protected set; }
    public virtual DateTime Created { get; set; }
    public virtual DateTime Updated { get; set; }
}

1 Ответ

14 голосов
/ 26 сентября 2011
public virtual int Id { get; protected set; }

protected set; <!-- Это ваша проблема.Вам нужен публичный установщик , если вы хотите, чтобы связыватель модели по умолчанию мог назначать значение.

...