Asp.net mvc MVC验证属性

Asp.net mvc MVC验证属性,asp.net-mvc,validation,Asp.net Mvc,Validation,在验证强类型视图模型时,如何使用验证属性验证类 假设您有这样一个视图模型: [PropertiesMustMatch("Admin.Password", "Admin.ConfirmPassword")] public class AdminsEditViewModel { public AdminsEditViewModel() { this.Admin = new Admin(); // this is an Admin class } pu

在验证强类型视图模型时,如何使用验证属性验证类

假设您有这样一个视图模型:

[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; }
}
因为密码字段是Admin类的属性,而不是AdminsEditViewModel。如何使它深入到很多层次,直到在ViewModel AdminsEditViewModel中找到Admin属性?
谢谢

您需要修改
属性mustmatchAttribute
类来解析属性名称并进行深入搜索

此属性不是框架的一部分;它包含在默认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;
}

不知道怎么做。你能提供更多的信息吗。thanks@Shane:给你。(未经测试)
object GetValue(object obj, string properties) {
    foreach(strong prop in properties)
        obj = TypeDescriptor.GetProperties(obj)
                            .Find(prop, ignoreCase: true)
                            .GetValue(obj);
    }
    return obj;
}