#asp.net-mvc #asp.net-mvc-3 #linq #razor #unobtrusive-validation
#asp.net-mvc #asp.net-mvc-3 #linq #razor #ненавязчивый-проверка
Вопрос:
Хорошо, я немного не понимаю, как с этим справиться, и я ищу идеи о том, в каком направлении двигаться с этим.
Я разрабатываю ASP.Net MVC 3 с сайтом Razor, который будет обрабатывать регистрацию для группы школ. В начале процесса регистрации пользователя спрашивают, в какую школу он регистрируется. В какой школе они регистрируются, будет определять, какая информация требуется (одной школе требуется SSN, а другой нет, для одной требуются водительские права #, а для другой нет и т.д.). Я использую LINQ to SQL и использую модели, сгенерированные LINQ to SQL, в качестве моделей моего представления. Я использовал ненавязчивую проверку с помощью атрибутов по всему остальному сайту, поэтому я хотел бы продолжать делать это, если это возможно. Итак, как мне сделать свойство модели обязательным в зависимости от школы, в которую они собираются?
Один из способов решения этой проблемы, который я могу придумать, — создать представление (или серию представлений) для каждой школы и каким-то образом заставить проверку зависеть от того, какое представление используется, но я не уверен, как это сделать с ненавязчивой проверкой.
Или, может быть, использовать одно и то же представление для всех школ, но иметь пользовательский валидатор <RequiredForSchools(requiredSchoolIDs as Integer())>
если бы я мог найти способ передать SchoolID пользовательскому валидатору (как на стороне javascript, так и на стороне сервера).
Ответ №1:
сколько там переменных? можете ли вы сократить ее до нескольких или менее 10? В этом случае вы можете использовать модели просмотра для каждого из них, которые с небольшим количеством вариаций могут быть самыми простыми. Вы выбираете свою viewmodel на основе school.
Если существует слишком много вариантов, то вам, вероятно, придется написать свои собственные атрибуты проверки, которые принимают решение.
Комментарии:
1. Это около 20 переменных. Хм, интересно, могу ли я просто наследовать модель LINQ to SQL для каждой школы и применять требуемый атрибут там по мере необходимости.
2. вы имеете в виду 20 общих вариантов? Или как в 20 разных переменных, что означает 20 ^ 20 вариаций? Если последнее, то я бы предложил создать пользовательский атрибут проверки, который может выполнить проверку за вас.
3. Это всего лишь 5 школ или вариаций, поэтому мне понадобится всего 5 классов, каждый с 20 свойствами, хотя некоторые из этих свойств требуются повсеместно (например, имя, фамилия и т.д.), Поэтому я мог бы оставить их и поместить <Required()> в родительский класс. Хотя извлечение LINQ из класса SQL не очень полезно, потому что DataContext не принимает его, а преобразование от родительского к дочернему и наоборот не работает. Хммм… Если я переключусь на шаблон репозитория, тогда я мог бы, но это большая работа для моего проекта. Кроме того, что касается создания моих собственных атрибутов проверки, у меня все еще есть проблема с получением SchoolID.
4. Ну, если есть только 5 школ, я бы просто создал 5 разных моделей представления с разными атрибутами проверки для каждой. Я действительно не понимаю, почему было бы трудно получить школьный идентификатор, он должен быть в вашей модели и доступен во время проверки.