当前位置: 首页 > 编程语言 > C#

ASP.Net MVC 2 Controller的TryValidate不validation模型中的List 项分享

时间:2023-04-10 14:53:58 C#

C#学习教程:ASP.NetMVC2Controller的TryValidate不验证模型中的List项通用列表属性对象。我有一个我正在尝试验证的模型,它不是发布到服务器的内容,而是发布的一些信息的组合,以及服务器上已有的内容......例如。...publicclassA{[必需]publicstringProperty1{get;放;}}...publicclassB{publicListValues{get;放;}}...if(!TryValidateModel(instanceofB)){//这应该触发,因为B中的A之一无效。返回视图(instanceofB);当我尝试验证B的模型实例时,它不会验证Values集合的验证属性。TryValidateModel方法只向下一级,因此它只检查TypeB对象的Validation属性,而不检查其嵌套对象。解决这个问题的一种方法是确定您自己的ValidationAttribute实现:publicclassListValidationAttribute:ValidationAttribute{publicoverrideboolIsValid(objectvalue){//如果输入对象不可枚举,则认为它是有效的。如果(可枚举==null){返回真;}foreach(objectiteminenumerable){//获取当前项目的所有属性,至少定义了一个//ValidationAttribute。IEnumerable属性=item.GetType()。GetProperties().Where(p=>p.GetCustomAttributes(typeof(ValidationAttribute),true).Count()>0);foreach(PropertyInfopropertyinproperties){//验证每个属性。IEnumerablevalidationAttributes=property.GetCustomAttributes(typeof(ValidationAttribute),true).Cast();foreach(ValidationAttributevalidationAttributeinvalidationAttributes){objectpropertyValue=property.GetValue(item,null);if(!validationAttribute.IsValid(propertyValue)){//如果有一个值则返回falsee被发现无效。返回假;}}}}//如果一切都有效,则返回true。返回真;}}以下属性validationList现在可用:publicclassB{[ListValidation]publicListValues{get;放;我还没有彻底测试上述方法的性能,但如果你的情况证明这是一个问题,另一种方法是使用辅助函数:if(!ValidateB(instanceofB)){//thisshould火,因为B中的A之一无效。返回视图(instanceofB);}...publicboolValidateB(Bb){foreach(aiteminb.Values){if(!TryValidateModel(item)){returnfalse;}}返回真;我有一个类似的问题,我通过避免完全调用TryValidate来修复它,我调用TryValidate的原因是因为我需要对我的模型进行一些更改然后进行验证。我最终为模型创建了一个接口,并将默认的模型绑定器替换为一个可以识别该接口并调用我的方法的绑定器。这一切都发生在框架调用第一次身份验证(这是递归的)之前。以上就是C#学习教程的全部内容:ASP.NetMVC2Controller的TryValidate在验证模型中不验证List项。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注——本文来自网络收藏,不代表立场,如涉及侵权,请右击联系管理员删除。如需转载请注明出处: