Нет лучшего способа обойти это без повторного извлечения значения из базы данных. Причина в том, что привязка модели MVC только смотрит на параметры GET или POST, чтобы связать MyField
с моделью действия, и если параметры GET / POST не имеют значения MyField
, тогда оно должно сохранять это свойство как null (как еще узнать, какое значение должно быть?)
Чтобы связыватель модели мог видеть ваше значение MyField
, нужно передать его в параметрах GET / POST, и для этого вам нужно явно указать форме представления, чтобы передать значение через Html.HiddenFor()
. У представления нет способа автоматически узнать, отправлять ли это свойство в параметрах post / get.
Однако одна идея, на которую вы можете обратить внимание, - это создать вспомогательный метод Razor (или Html), который принимает имя поля и выражение (x => x.MyField
) и записывает для вас следующий вывод:
<div class="display-label">My Field</div>
<div class="display-field">@Model.MyField</div>
@Html.HiddenFor(model => model.MyField)
Это означает, что вам нужно написать только одну строку кода (что-то вроде @Html.ShowReadOnlyField(x => x.MyField, "My Field")
вместо этих 3 строк. Однако это также предполагает, что везде, где вы хотите это сделать, будет иметь одинаковую структуру div.
Редактировать : Просто помните о проблемах безопасности полей, доступных только для чтения, поскольку они не предназначены только для чтения. Лучше повторно извлечь эти данные из базы данных, если эти данные будет использоваться для чего-либо в контроллере, потому что, даже если он читается только в HTML-форме, пользователи все равно могут установить это значение на что угодно, манипулируя данными POST / GET.