Атрибут проверки MVC - PullRequest
       1

Атрибут проверки MVC

3 голосов
/ 16 января 2011

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

Предположим, у вас есть модель вида, подобная этой:

[PropertiesMustMatch("Admin.Password", "Admin.ConfirmPassword")]
public class AdminsEditViewModel
{
    public AdminsEditViewModel()
    {
        this.Admin = new Admin(); // this is an Admin class
    }

    public IEnumerable<SelectListItem> SelectAdminsInGroup { get; set; }


    public IEnumerable<SelectListItem> SelectAdminsNotInGroup { get; set; }

    public Admin Admin { get; set; }
}

Я получаю нулевое исключение, когда в этой строке PropertiesMustMatchAttribute

object originalValue = properties.Find(OriginalProperty,  true /* ignoreCase */).GetValue(value);

, поскольку поле Password является свойством класса Admin, а НЕ AdminsEditViewModel. Как сделать так, чтобы он проходил так много уровней, пока не нашел свойство Admin в ViewModel AdminsEditViewModel? спасибо

1 Ответ

1 голос
/ 16 января 2011

Вам нужно изменить класс PropertiesMustMatchAttribute для анализа имени свойства и глубокого поиска.

Этот атрибут не является частью фреймворка; он включен в шаблон MVC по умолчанию (в AccountModels.cs)
Поэтому вы можете изменить его в соответствии с вашими потребностями.

В частности, вы должны вызвать name.Split('.'), а затем перебрать разделенные имена и получить значения свойств.
Это выглядело бы как

object GetValue(object obj, string properties) {
    foreach(strong prop in properties)
        obj = TypeDescriptor.GetProperties(obj)
                            .Find(prop, ignoreCase: true)
                            .GetValue(obj);
    }
    return obj;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...