动态检查模型的每个KeyValuePair值

时间:2010-10-15 12:42:12

标签: c# model-view-controller viewmodel

我有一个类似于我的验证器创建的视图模型。

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 个答案:

答案 0 :(得分:2)

试试这个:

    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;
    }