Почему mvc Html.HiddenFor не отображает мое поле? - PullRequest
16 голосов
/ 31 августа 2010

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

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

модель

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

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

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

Я проверил, а идентификатор НЕ 0 ..?!

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

Редактировать

Кажется, проблема в том, что упоминается ниже. Это работает

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

Благодаря Манафу

Ответы [ 4 ]

24 голосов
/ 31 августа 2010

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

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

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

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

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

5 голосов
/ 07 февраля 2014

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

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

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

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

По предложению Даррена Остера я перешел на следующее и исправил проблему:

[HttpGet]
ActionResult SearchForSomething(SearchForm searchForm)
{
    searchForm.MyId = SomeValueFromSession;
    ModelState.Clear();
    return View("SearchForSomething", searchForm);
}
0 голосов
/ 13 августа 2015

Я столкнулся с этой проблемой и с @ 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 .

0 голосов
/ 16 июля 2015

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

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

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