在验证强类型视图模型时,如何使用验证属性验证类。
假设你有一个像这样的视图模型:
[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
上我得到null异常object originalValue = properties.Find(OriginalProperty, true /* ignoreCase */).GetValue(value);
因为Password字段是Admin类的属性而不是AdminsEditViewModel。如何在ViewModel AdminsEditViewModel中找到Admin的属性之前,它会如此深入? 感谢
答案 0 :(得分:1)
您需要修改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;
}