В каком порядке выполняется привязка и проверка модели в ASP.NET MVC 2? - PullRequest
1 голос
/ 22 марта 2010

Я использую ASP.NET MVC 2 и использую модель представления для подхода представления. Я также использую Automapper для отображения свойств из моей доменной модели в модель представления.

Возьмем этот пример модели представления (с Обязательными атрибутами аннотации данных для проверки):

public class BlogPost_ViewModel
{
    public int Id { get; set; }
    [Required]
    public string Title { get; set; }
    [Required]
    public string Text { get; set; }
}

В режиме редактирования сообщений я использую текстовый редактор (CKeditor). Поскольку CKeditor является редактором HTML, в идеале мне нужно, чтобы CKeditor HTML кодировал ввод пользователя при отправке формы, чтобы проверка ввода ASP.NET не вызывала жалоб. Это не проблема, поскольку в CKeditor встроена эта функциональность, однако мне необходимо декодировать выходные данные CKeditor перед отображением обратно в объект домена (через Automapper).

Я хочу добавить новое свойство (в модель представления выше), чтобы решить эту проблему следующим образом:

public string HTMLEncodedText {
    get { return HTMLEncode(Text); }
    set { Text = HTMLDecode(value); }
}

Затем я могу привязать это свойство к CKeditor в представлении, но по-прежнему использовать Automapper для сопоставления свойства «Текст» в контроллере - и все это без необходимости выключать проверку ввода.

У меня вопрос: знаете ли вы, как работает процесс связывания и проверки модели в ASP.NET MVC 2? Связаны ли все свойства модели перед проверкой? Или каждое отдельное свойство проверяется при его установке. Я думаю, что в идеале, чтобы моя идея работала, все свойства должны быть установлены до проверки модели.

1 Ответ

1 голос
/ 22 марта 2010

Свойства проверяются сначала, затем они связаны. Поэтому для вашей модели представления вам, возможно, придется установить [Required] в свойстве HTMLEncodedText, а не в свойстве Text.

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