Динамическая проверка каждого значения KeyValuePair модели - PullRequest
0 голосов
/ 15 октября 2010

У меня есть такая модель представления, которая создана из моего валидатора.

public class ViewModel
{
    public KeyValuePair<int, RuleType> Foo { get; set; }
    public KeyValuePair<string, RuleType> Bar { get; set; }
}

Моя реальная модель просмотра имеет более 20 полей. После проверки моих данных общий список типа ViewModel возвращается в мое представление MVC и обрабатывается в отчете. Однако появился запрос на добавление функции, когда пользователи хотят видеть только модели с ошибками и предупреждениями, за исключением допустимых объектов. RuleType является перечислителем. Модель действительна, если все значения пары ключей RuleType.Success.

Можно ли пройтись по каждой модели и проверить RuleType без необходимости вручную проверять каждое свойство? Моя GetAllModelsWithErrors() функция будет возвращать список недопустимых моделей. Я верю, что рефлексия может быть решением, но я не уверен, что это хорошее решение.

1 Ответ

2 голосов
/ 15 октября 2010

Попробуйте это:

    private IEnumerable<ViewModel> GetInvalidModels(ViewModel[] viewModels)
    {
        return 
            from viewModel in viewModels 
            from prop in typeof(ViewModel).GetProperties() 
            let ruleType = ((KeyValuePair<object, RuleType>)prop.GetValue(viewModel, null)).Value 
            where ruleType != RuleType.Success 
            select viewModel;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...