MVC 3 - отображать / использовать только определенные свойства модели - PullRequest
1 голос
/ 16 марта 2012

Будучи довольно новым для MVC 3, я не уверен в наилучшем подходе для этого. Допустим, у меня есть простой класс, подобный этому ...

Public Class PDetail

    <Required>
    Public Property FirstName As String

    <Required>
    Public Property LastName As String

    <Required>
    Public Property CellNo As String

    <Required>
    Public Property PassportNo As String

    <Required>
    Public Property Nationality As String

    Public Property ExtraRequirements As String

End Class

Используется для создания моей модели. Во время процесса бронирования я могу запросить эти значения в представлении. Однако, в зависимости от типа бронирования, я могу не задавать некоторые из этих вопросов. Например, я не могу требовать PassportNo и национальность, если бронирование не предполагает поездки в другую страну.

Какой лучший способ справиться с этим? Кажется, что проще всего иметь отдельное свойство, которое определяет, какие поля отображаются как EditorFor, а другие используют HiddenFor. Но разумно ли это? Также, когда дело доходит до проверки на стороне сервера, скрытые поля все еще проверяются.

Класс, приведенный выше, является упрощенной версией того, что я на самом деле делаю. У меня есть до 10 полей, которые могут быть показаны или скрыты независимо в зависимости от типа бронирования, поэтому создание отдельной модели для каждой комбинации было бы кошмаром.

Ответы [ 3 ]

1 голос
/ 16 марта 2012

Стив Сандерсон (Steve Sanderson) опубликовал хороший способ проверять только входящие значения , хотя вам по-прежнему необходимо проверять модель в вашем домене в целом для защиты от вредоносных атак.

Вы должны будете защитить себя от атаки массового назначения, используя принципы, описанные здесь (используя атрибут Bind для вашего случая).

0 голосов
/ 16 марта 2012

Вы можете проверить валидации в зависимости от вашего бронирования с помощью интерфейса IValidatableObject .

Читать эту запись для получения дополнительной информации.

0 голосов
/ 16 марта 2012

Вы можете взглянуть на FluentValidation.NET , который прекрасно интегрируется с ASP.NET MVC и очень упрощает такие сценарии проверки. Он использует императивный подход по сравнению с декларативным подходом, используемым аннотациями данных, который, как вы описали, может быть кошмаром .

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