2010-09-01 2 views
1

Я читал аннотации данных (т. Е. Scott Guthrie's blog post), и я в восторге от концепции логики валидации в одном месте.Данные Аннотации к подмножеству свойств

Неужели кто-нибудь смог успешно использовать эту технику, предложив пользователю ввести подмножество свойств, связанных с данным классом?

Например (псевдокод) ...

public class Person 
{ 
    [Required] 
    public string Name 

    [Required] 
    public string Email 
} 

Тогда допустим у вас есть вид, который отображает форму только имя. Значение ModelState.IsValid в контроллере HttpPost для этого представления всегда будет false, потому что электронная почта требуется и отсутствует.

Я думал о наличии отдельных моделей, для части, для которой требуется только имя, а другое для части, которая требует как имени, так и электронной почты, но затем я нарушаю принцип СУХОГО, потому что я буду иметь имя логика проверки в двух местах.

Любые предложения? Можно ли получить данные аннотации, работающие таким образом? Должен ли я просто иметь два отдельных класса? Возможно, CustomValidationAttribute, который проверяет флаг, прежде чем определять, требуется ли электронная почта?

+0

Я не один, чтобы взять кредит на свой собственный ответ, но я вижу, что Стив Сандерсон решил это на http://blog.stevensanderson.com/2010/02/19/partial-validation-in-aspnet-mvc- 2/- если кто-то хочет прочитать и отправить ответ ... :) – Mayo

+0

Поведение по умолчанию MVC 1 было изменено по уважительной причине. На самом деле я действительно буду очень осторожен, что решение Стива. – jfar

ответ

3

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

Я бы создал пользовательский атрибут, только если эти свойства были в одной форме, а иногда и то и другое требовалось, а иногда требовалось только одно из них. Если у вас есть отдельные представления, я бы сделал еще одну модель представления.

+0

Будучи новичком в ASP.NET MVC Я не совсем уверен в справедливости «каждый взгляд должен иметь свою собственную модель представления». На самом деле, в комментариях к ссылке Сандерсона, приведенной выше, есть люди, обсуждающие эту точную фразу. Можете ли вы предоставить ссылки на статьи, которые обсуждают это дальше? Я заметил, что шаблон Visual Studio, похоже, следует за этим (т. Е. ChangePasswordModel и LogOnModel), но я не могу найти много информации об этом. – Mayo

+0

@Mayo, потому что каждый из этих представлений означает совершенно другую вещь в другом контексте. Они не разделяют наследование или даже отношения и похожи только на то, что они обладают некоторыми свойствами. http://domaindrivendesign.org/node/91 – jfar

+0

Спасибо jfar и Necros - я думаю, что я ищу, это акт наличия модели домена и модели представления. – Mayo

Смежные вопросы