MVC3-ValidationFailure-RetainValues - PullRequest
       5

MVC3-ValidationFailure-RetainValues

1 голос
/ 18 августа 2011

Я использую MVC3 в ASP.NET. В почтовой акции, У меня есть вид, в котором он должен позволить мне редактировать значения. Некоторые поля доступны только для чтения, а некоторые - редактируемые. Если происходит сбой проверки, он должен сохранить значения и отобразить то же самое представление. Если ошибок нет, то следует разрешить мне отправить форму.

Control1: Имя, которое я должен отображать как метку, поскольку оно должно быть доступно только для чтения

@Html.DisplayFor(Model => Model.Absentee.Name)

Control2:

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

  @Html.TextBoxFor(Model => Model.AbsStart)
     @Html.ValidationMessageFor(Model => Model.AbsStart) (This Makes it as a required Field)

Контроль 3:

Это также текстовое поле, но не обязательное поле.

@Html.DisplayFor(Model => Model.AbsEnteredAt)

Когда нет ошибок проверки, все работает отлично, но когда есть ошибка проверки, я буду в том же виде (что я и хочу), но значение в первом элементе управления не сохраняется.

Так, в основном, когда ошибка проверки, значение не сохраняется в DisplayFor Control

Что мне сделать, чтобы отсортировать это? Спасибо

Ответы [ 2 ]

0 голосов
/ 19 августа 2011

Как и 99% моих ответов в теге asp.net-mvc, это одно и то же: ИСПОЛЬЗУЙТЕ МОДЕЛИ ПРОСМОТРА .Не заставляйте действия вашего контроллера принимать / передавать модели доменов в / из представлений.Дизайн представлений моделей для каждого вида.Модели представлений - это классы, специально предназначенные для удовлетворения требований данного представления.Итак, давайте предположим, что у вас есть два разных представления, которые позволяют вам редактировать / обновлять одну и ту же модель домена.Затем вы создадите две разные модели представлений, и каждая модель представлений будет содержать только те свойства, которые используются соответствующим представлением вместе с их конкретными требованиями к проверке.

Что касается помощника DisplatFor, он генерирует простойэтикетка.Метки никогда не отправляются на сервер при отправке формы.Поэтому вы можете надеяться заполнить / проверить действие вашего контроллера только теми свойствами, которые содержатся в форме.Для свойств, которые не должны отображаться, вы можете использовать либо скрытые поля, либо одно скрытое поле, содержащее только некоторый уникальный идентификатор, чтобы вы могли извлечь из своего хранилища данных исходные значения (так как пользователь не должен их изменять).

Что касается отображения между моделью представления, которую вы должны спроектировать, и исходной моделью предметной области, это отображение обычно выполняется внутри контроллера, и для его упрощения я бы рекомендовал использовать AutoMapper ,

0 голосов
/ 18 августа 2011

Когда возникает ошибка, какую модель представления вы возвращаете?DisplayFor не отправляется обратно на сервер ... добавьте это под экран для:

@Html.HiddenFor(Model => Model.Absentee.Name)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...