Динамическая проверка на MVC 2

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

 [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 динамически создается? например, поля подписки, которые на сервере могут быть созданы пользователем и в конечном итоге выглядят следующим образом:

альтернативный текст

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

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

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:

альтернативный текст

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

Спасибо


person balexandre    schedule 07.10.2010    source источник


Ответы (2)


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

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

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

person Lorenzo    schedule 11.10.2010
comment
Привет еще раз :) Я думал просто добавить к нему немного jQuery для проверки с использованием соглашения об именах классов, поскольку я знаю, какой тип и требуется ли это ... Все это просто для того, чтобы сделать это с помощью javascript, как в контроллере, который я могу всегда возвращал ошибку, просто хотел сделать все правильно и сохранить поездку на сервер туда и обратно :) - Я взгляну на этот проект. - person balexandre; 11.10.2010
comment
Ну... пожалуйста, держите меня в курсе этого! Также взгляните на этот плагин jQuery: http://bassistance.de/jquery-plugins/jquery-plugin-validation/. Он легко интегрируется с asp.net mvc и является очень хорошим плагином, который может помочь с вашими требованиями... - person Lorenzo; 11.10.2010

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

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

person Yaroslav Yakovlev    schedule 13.10.2010