Вопрос по razor, asp.net-mvc – MVC4 Razor - @ Html.Display для не привязки к модели

30

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

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

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

Мне нужно отобразить поля как "ярлыки". Вот почему; Цель этого представления - дать пользователю возможность просматривать данные перед их отправкой в базу данных. Есть идеи, как мне этого добиться? Jacques

Ваш Ответ

6   ответов
0

что это старый вопрос, но вы можете использовать свой собственный комбинированный элемент управления дисплеем, как показано ниже. Это отображает значение модели, за которым следует скрытое поле для этого значения.

@Html.DisplayExFor(model => Model.ItemCode)

Просто используйте то, что уже есть у фреймворка

public static MvcHtmlString DisplayExFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> ex)
{
    var sb = new StringBuilder();
    sb.Append(htmlHelper.DisplayFor(ex));
    sb.Append(htmlHelper.HiddenFor(ex));

    return MvcHtmlString.Create(sb.ToSt,ring());
}
0

yFor, это создает элемент, который не содержит никаких значений формы. Обычно вы используете их в сочетании друг с другом, чтобы создать метку для вашего текстового поля, а затем с помощью 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"/>
15

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

@using(Html..DisplayFor(x=>x.TypeName)
  @Html.HiddenFor(x=>x.TypeName)
  <input type="submit" value="Save" />
}
Привет, Шыю, мне нужно отобразить поля как & quot; метки & quot ;. Вот почему; Цель этого представления - дать пользователю возможность просматривать данные перед их отправкой в базу данных. Есть идеи, как мне этого добиться? Jacques
! @jacques: Так что используйте Displayfor для показа данных пользователю и используйте HiddenFor, чтобы хранить их в скрытых переменных, и тогда вы можете сделать пост в форме.
1

DisplayFor строит метку HTML, а не ввод. Метки не размещаются на сервере, а вводятся.

58

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

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

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

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

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

использованиеTextBoxFor когда вы хотите разрешить ввод данных пользователем или разрешить пользователю редактировать поле.

EDIT

"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 чтобы показать эти значения.

Очень мило с вашей стороны. Спасибо.
5

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

Похожие вопросы