У меня здесь странная проблема.
в модели (.cs):
public long? ContactoAdditionalId { get; set; }
public long Test1 { get; set; }
public long? Test2 { get; set; }
public string Test3 { get; set; }
В контроллере (в конце действия непосредственно перед просмотром):
[HttpPost]
[AllowAnonymous]
public ActionResult Index( Contacto model )
{
DoSomeStuff( model, ... );
(...)
model.Test1 = model.ContactoAdditionalId.HasValue ? model.ContactoAdditionalId.Value : -1;
model.Test2 = model.ContactoAdditionalId;
model.Test3 = model.ContactoAdditionalId.HasValue ? model.ContactoAdditionalId.Value.ToString() : "No value!";
return View( model );
}
Наконец, в представлении (.cshtml):
@using MyApp.Models;
@model Contacto
@using ( Html.BeginForm( "Index", "Contacto" ) )
{
@Html.HiddenFor( model => model.ContactoAdditionalId )
@Html.HiddenFor( model => model.Test1 )
@Html.HiddenFor( model => model.Test2 )
@Html.HiddenFor( model => model.Test3 )
(...)
Как вы уже догадались, ContactoAdditionalId (я оставил его с настоящим именем на случай, если ТО является проблемой) имеет значение НЕ , появляющееся в представлении.
Когда я нажимаю F12 в Chrome, чтобы открыть Инструменты разработчика и проверять HTML, не имеет значения для ContactoAdditionalId , но есть значения ARE для Test1, Test2 и Test3.
Обратите внимание, что я использовал длинный, длинный? и строка, чтобы проверить, связана ли проблема с типами, но все три показывают значение в HTML.
Конечно, цель этого скрытого поля - вернуть этот ContactoAdditionalId при POST'ing. Таким образом, он не работает, а его свойство модели равно нулю!
Я также заметил кое-что странное: если я добавлю в View, как раз перед HiddenFor:
@Html.DisplayFor( model => model.ContactoAdditionalId, ... )
Это неожиданно работает, и теперь скрытое поле имеет значение!
Что здесь происходит? Я выполнил пошаговую отладку в Visual Studio 2017, и когда я достиг конца кода действия, он начал переходить в представление cshtml, поэтому никакого дополнительного кода (насколько я знаю, по крайней мере, не код нашего проекта) выполняется после действия и перед преобразованием представления в HTML.