2012-09-21 2 views
0

Скажем, у меня есть форма, в которой есть поля для сбора данных о будущих конференциях (а не в реальном домене, но их хватит для целей этого вопроса). Часть проверки заключается в том, что новое событие может произойти только один раз в этом году, поэтому, если у вас есть конференция «stackoverflow getmessyandrunk», которая происходит в 2012 году, пользователю не разрешается вводить новое событие с тем же именем и год ...Asp.Net MVC 3 проверяет 2 зависимые поля

Теперь - то, что я пытался до сих пор, чтобы добавить удаленный валидатор к каждому из полей:

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

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

Как это делают другие?

+1

Нужно ли также поддерживать проверку на стороне клиента? Не можете ли вы выполнить проверку на сервере? Также, похоже, это ошибка проверки логики домена. Почему бы просто не добавить его в ModelState, а затем использовать помощник 'Html.ValidationSummary'? Почему вам нужно связать эту ошибку с конкретным полем, если на самом деле может быть несколько зависимых полей? –

+0

Это имеет смысл. Я обдумаю это немного ... было бы хорошо получить контекстуальную обратную связь по полям, которые вызывают ошибку ... Кроме того, я не большой поклонник добавления valdiation в действие и добавление ошибок в modelstate вручную ... – iwayneo

ответ

0

Если вы предпочитаете использовать аннотации данных для проверки, я рекомендую вам просто использовать Foolproof библиотеку проверки, которая доступна на Codeplex: https://foolproof.codeplex.com/

Он поддерживает, помимо прочего, следующие проверки «requiredif» атрибуты/украшения :

[RequiredIf] 
[RequiredIfNot] 
[RequiredIfTrue] 
[RequiredIfFalse] 
[RequiredIfEmpty] 
[RequiredIfNotEmpty] 
[RequiredIfRegExMatch] 
[RequiredIfNotRegExMatch] 

Для начала легко:

  • Загрузить пакет из предоставленных ссылок
  • Добавить ссылку на прилагаемый .dll файл
  • Импортировать включенные JavaScript файлов
  • Убедитесь, что ваши взгляды ссылки на включенные JavaScript файлов из его HTML для Ненавязчивого JavaScript и JQuery проверки.

Если вам не нравится смешивать вашу логику домена и логики проверки, украсив ваши классы домена атрибутами проверки, вы всегда можете выбрать мощную плавную проверку. Вы можете найти библиотеку для этого здесь: https://fluentvalidation.codeplex.com/ Это, к сожалению, только серверная, но подходящая опция, если разделение проблем имеет для вас важное значение ... и контекст не теряется из-за того, что проверка привязана к определенному поле. (См. Здесь: http://www.codeproject.com/Articles/326647/FluentValidation-and-Unity)