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

MVC4 Razor - @Html.DisplayFor не привязывается к модели

Я пытаюсь найти меня с помощью MVC4 Razor, и я застрял в этой простой проблеме.

Когда я использую @Html.DisplayFor, модель всегда отправляется обратно как NULL, но когда я использую @Html.TextBoxFor, эта модель полностью заполнена, что мне не хватает?

Заранее спасибо

4b9b3361

Ответ 1

Это распространенная проблема, которую многие пропустили в инфраструктуре asp.net mvc. Не только разница в помощниках, таких как HiddenFor, DisplayFor, TextBoxFor, но как именно структура автоматически настраивает и проверяет эти входы. Магия все делается с атрибутами data-* HTML5. Вы заметите, что при просмотре созданного тега ввода будут какие-то дополнительные свойства в форме data-val, data-val-required и, возможно, некоторые дополнительные свойства данных для типов, например численные значения будут data-val-number.

Эти атрибуты данных позволяют расширению jQuery jquery.validate.unobtrusive.js анализировать DOM, а затем определять, какие поля проверяют или генерируют сообщения об ошибках.

Фактический набор опубликованных данных отражается от свойства name. Это то, что должно соответствовать модели, которая находится в методе С# или vb [HttpPost].

Используйте HiddenFor, если вы хотите предоставить опубликованные данные, о которых пользователю не нужно знать.

Используйте DisplayFor, если вы хотите показывать записи, но не разрешать их редактирование.

Используйте TextBoxFor, если вы хотите разрешить ввод пользователю или разрешить пользователю редактировать поле.

ИЗМЕНИТЬ

"the purpose of this view is to enable the user to view the data before submitting it to the database. Any ideas how I can achieve this?"

Вы можете выполнить это с дуэтом HiddenFor и DisplayFor. Используйте HiddenFor, чтобы значения были готовы к публикации, и DisplayFor, чтобы показать эти значения.

Ответ 2

DisplayFor не будет связывать модель. TextBoxFor будет делать, потому что он создает элемент input в форме и форма может обрабатывать его при его отправке. Если вы хотите получить некоторые данные в действии HttpPost, и вы не хотите использовать TextBoxFor, вы можете сохранить эту модель propritty pirticulare в скрытой переменной внутри формы с помощью вспомогательного метода HTML HiddenFor, подобного этому.

@using(Html.BeginForm())
{
  <p>The Type Name is</p> @Html.DisplayFor(x=>x.TypeName)
  @Html.HiddenFor(x=>x.TypeName)
  <input type="submit" value="Save" />
}

Ответ 3

Используйте как DisplayFor, так и HiddenFor. DisplayFor просто отображает текст и не является полем ввода, поэтому он не отправляется назад. HiddenFor фактически создает <input type="hidden" value="xxxx"/>

Ответ 4

DisplayFor строит HTML-метку, а не ввод. Ярлыки не отправляются на сервер, но есть входы.

Ответ 5

Вы имеете в виду во время публикации формы? Если вы используете DisplayFor, это создает элемент, который не содержит значений формы. Как правило, они используются совместно друг с другом для создания метки для вашего текстового поля, а затем с помощью Html.TextBoxFor, чтобы позволить пользователям изменять элемент данных.

Пример:

@Html.DisplayFor(x=>x.Item)
@Html.TextBoxFor(x=>x.Item)

Будет рендеринг

Item <a text input field following>

Или в HTML

<label for="Item">Item</label><input type="Text" id="Item" name="Item"/>