Динамическая проверка на MVC 2 - PullRequest
3 голосов
/ 07 октября 2010

Это отлично работает

 [MetadataType(typeof(Area_Validation))]
 public partial class Area
 {
    ...
 }

 public class Area_Validation
 {
 [Required(ErrorMessage = "Please add this field.")] 
 public int Email { get; set; }

 [Required(ErrorMessage = "Please add this field")]
 public string Name { get; set; }
 }

но как насчет , если Area_Validation это , динамически создаваемое ?например Поля подписки , которые на внутреннем сервере могут быть созданы пользователем и в конечном итоге будут выглядеть следующим образом:

alt text

Как установить Метаданные в каждом поле для автоматической проверки ?

В настоящее время я делаю:

public class SubscriberFormViewModel
{
    public List<SubscriberFieldModel> Fields { get; private set; }
    public Calendar Calendar { get; private set; }
    public Company Company { get; private set; }

    public SubscriberFormViewModel()
    { 
        // TODO: This is only for testing while validation is not set
    }
    public SubscriberFormViewModel(Decimal calendarId)
    {
        if (calendarId > 0)
        {
            SubscribersRepository db = new SubscribersRepository();

            Calendar calendar = db.GetCalendarById(calendarId);
            Company company = db.GetCompanyById(calendar.company_id);

            this.Fields = db.FindAllSubscriberFieldsByCalendar(calendarId);
            this.Calendar = calendar;
            this.Company = company;
        }
        else
            this.Fields = new List<SubscriberFieldModel>();
    }
}

, и я хочу установить Метаданные всего Fields свойство

Другими словами, это Fields заполняется из базы данных и может иметь несколько типов, может быть string, number, dropdown и т. д... вроде как MailChimp Fields Properties:

alt text

есть способ сделать это программно или мне нужно создать плагин jQuery для его проверки и остановкис помощью проверки использования от MVC2?

Спасибо

Ответы [ 2 ]

1 голос
/ 13 октября 2010

На самом деле вы можете создать несколько сценариев проверки, по одному на тип (или больше на тип, если вам нужно).Затем добавьте эти правила проверки при создании типа.Когда вам нужно проверить, вы можете вызвать шаблонный метод Validate, который проверит, будут ли эти правила, а если нет - добавит ошибки в ModelState, которые вы сможете показать на внешнем интерфейсе.

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

0 голосов
/ 11 октября 2010

Я не думаю, что вы можете сделать это с помощью атрибутов аннотаций данных.

В Codeplex существует проект под названием Свободная проверка , который позволяет свободно добавлять правила проверки с использованием кода .Net. Я никогда не использовал этот проект, но, кажется, может помочь вам в вашем случае с динамически созданными объектами.

Надеюсь, это поможет!

...