Я создал строго типизированное представление 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. Созданные и обновленные правильно заполненызначения из представления.
Это должно быть 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; }
}