Подтвердить что ты не робот

Почему mvc Html.HiddenFor не отображает мое поле?

Я пытаюсь сделать эту простую вещь

<%= Html.HiddenFor(model => model.Id)%>

модель

[HiddenInput(DisplayValue=true)]
public int Id { get; set; }

но я всегда получаю этот рендеринг

<input type="hidden" value="0" name="UserInfo.Id" id="UserInfo_Id">

У меня есть чек, а id - НЕ 0..?!

нужно какое-то объяснение здесь...

Изменить

Проблема, похоже, следующая статья, упомянутая ниже. Это работает

<input type="hidden" value="<%= Html.AttributeEncode(Model.Id) %>" id="<%= Html.IdFor(model=>model.Id)%>" name="<%= Html.NameFor(model=>model.Id)%>" />

Благодаря Manaf

4b9b3361

Ответ 1

Я не уверен, что это с вами, но Html.HiddenFor() "не выводит правильные значения после публикации, если значение изменяется во время публикации." и это не ошибка, которая была разработана таким образом.

Подробнее Здесь

Быстрое исправление:

Не используйте помощника, попробуйте вместо этого:

<input type="hidden" value="<%= Html.AttributeEncode(model.Id) %>" id="Id" name="Id" />

Всегда работал у меня:)

Ответ 2

Чтобы добавить к правильному ответу Manaf - вы правильно заметили, что проблема возникает в действиях контроллера, которые обрабатывают сообщения. Я получал ту же проблему в действии контроллера, который обрабатывает get, когда я явно передаю модель в представление:

[HttpGet]
ActionResult SearchForSomething(SearchForm searchForm)
{
    searchForm.MyId = SomeValueFromSession;
    return View("SearchForSomething", searchForm);
}

В представлении эта строка, отображающая скрытый ввод для MyId, всегда отображается "0":

@Html.HiddenFor(m => m.MyId);

Предложение Per Darren Oster я изменил на следующее и устранил проблему:

[HttpGet]
ActionResult SearchForSomething(SearchForm searchForm)
{
    searchForm.MyId = SomeValueFromSession;
    ModelState.Clear();
    return View("SearchForSomething", searchForm);
}

Ответ 3

Мой комментарий отнесен к последнему месту (даже я не смог его найти), поэтому:

Если вы не хотите очищать модельное состояние, как предложил Даррен Остер, удаление проблемного ключа для меня: ModelState.Remove("HiddenKey")

Ответ 4

Я столкнулся с этой проблемой также с помощью @Html.HiddenFor.

@Html.Hidden( "Id", Model.Id) также дал значение 0, но поле внешнего ключа, например, @Html.Hidden( "Model_Category_ModelId", Model.Category.ModelId), действительно работало, а оно @Html.HiddenFor(m = > m.Category.ModelId) не сделал.

Моим решением было перенаправить на действие get, как описано в ASP.NET MVC Post Redirect Get Pattern.