Несколько наборов правил проверки MetadataType с использованием DataAnnotations с ASP.Net MVC - PullRequest
4 голосов
/ 08 января 2011

Я использую DataAnnotations и MetadataType в ASP.Net MVC для проверки создания одного из моих пользовательских объектов через форму на нашем сайте www.Это работает очень хорошо.

Но теперь нам также нужно иметь возможность создавать тот же объект с помощью формы на нашем внутреннем сайте администратора.

Однако правила проверки немного отличаются в том, что некоторыеполя обязательны для заполнения на сайте www, которые не являются обязательными, когда мы сами заполняем форму через нашу внутреннюю систему администратора.

Кроме того, я хотел бы иметь возможность давать одному и тому же полю разные DisplayNames и разные сообщения проверки.в зависимости от того, с какого сайта / формы собираются данные и т. д.

Как я могу иметь два разных типа метаданных и указать, какой из них я хочу использовать при проверке на сайте администратора, а не на сайте www. Т.е.два разных набора правил валидации и возможность указать, по какому из них я проверяю ..

Я использовал свой MetadataType с использованием Buddy (частичных) классов, так как мои объекты автоматически генерируются LINQ to SQL.

Ответы [ 2 ]

3 голосов
/ 04 февраля 2011
1 голос
/ 08 января 2011

Я был в такой же ситуации раньше.Я искал в то время, но обнаружил, что не было никакого решения, которое дало бы вам два набора правил проверки для одного и того же класса.

То, как я справился с этим, заключалось в использовании моделей представлений.У вас есть «базовые» классы модели, и вы хотите, чтобы разные пользовательские интерфейсы (в данном случае веб-интерфейс и пользовательский интерфейс администратора) имели разные правила проверки.В этом случае вам не понадобятся классы собеседников для ваших классов модели, поскольку вы не хотите применять правила проверки к самому классу модели, вместо этого вам нужно будет наследовать от класса модели, чтобы создать два класса модели представления, один для веба.а другой - для интерфейса администратора и применяет правила проверки с помощью DataAnnotations по-разному для этих классов в соответствии с вашими потребностями.Вы также можете «улучшить» свои классы модели представления с помощью любых дополнительных специфичных для пользовательского интерфейса атрибутов.

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

Я хотел бы услышать, есть ли у кого-нибудь лучшее решение для этого.

...