asp.net-mvc-2 – 如何在自定义验证属性中为不同的方案设置多个
发布时间:2020-12-16 09:58:59 所属栏目:asp.Net 来源:网络整理
导读:我刚刚开始掌握自定义验证属性,我正在尝试编写一个自定义验证attirbute,它将放置在类级别以验证我的模型的多个属性. 我可以访问我的模型上的所有属性,并且我希望能够检查我的IsValid重载中的多个条件,并报告它们,具有如下不同的错误消息(简单示例). public o
我刚刚开始掌握自定义验证属性,我正在尝试编写一个自定义验证attirbute,它将放置在类级别以验证我的模型的多个属性.
我可以访问我的模型上的所有属性,并且我希望能够检查我的IsValid重载中的多个条件,并报告它们,具有如下不同的错误消息(简单示例). public override bool IsValid(object value) { var model = (MyObject) value; //if this value is set,I don't want to do anything other checks if (model.Prop3) { return true; } if (model.Prop1 == "blah" && model.Prop2 == 1) { ErrorMessage = "you can't enter blah if prop 2 equals 1"; return false; } if(model.Prop1 == "blah blah" && model.Prop2 == 2) { ErrorMessage = "you can't enter blah blah if prop 2 equals 2"; return false; } return true; } 但是当我这样做时,我在第一次引用ErrorMessage时遇到异常“无法多次设置属性. 现在我可以将自定义属性拆分为多个自定义属性,但希望有一种方法可以在一个属性中进行,否则,我会在每个属性中重复我的“全部捕获” //if this value is set,I don't want to do anything other checks if (model.Prop3) { return true; } 我已经有了一个搜索,但找不到任何东西,所以如果我遗漏任何明显的东西,请道歉. 提前致谢! 解决方法
有趣的问题!我可以想到两个解决方案.所以不是基于你想要的适当解决方案,但它们可能有助于重用你的代码.你不能创建一个名为MyCustomAttribute(或其他东西)的CustomAttribute抽象类,它以下列方式覆盖IsValid:
public override bool IsValid(object value) { var model = (MyObject) value; //if this value is set,I don't want to do anything other checks if (model.Prop3) { return true; } CustomValidate(model); } CustomValidate(MyObject模型)是您的抽象方法,然后,您可以编写多个自定义属性类来扩展MyCustomAttribute,并且纯粹需要为特定方案实现验证逻辑. 所以你可以有两个类: public class BlahCustomAttribute : MyCustomAttribute { public override Boolean CustomValidate(MyObject obj) { if (model.Prop1 == "blah" && model.Prop2 == 1) { ErrorMessage = "you can't enter blah if prop 2 equals 1"; return false; } } } public class BlahBlahCustomAttribute : MyCustomAttribute { public override Boolean CustomValidate(MyObject obj) { if (model.Prop1 == "blah" && model.Prop2 == 1) { ErrorMessage = "you can't enter blah blah if prop 2 equals 1"; return false; } } } 希望这会有所帮助 – 不完全是你想要的,但也会完成工作和干净. 另一个解决方案是用逗号分隔ErrorMessage属性中的错误消息并在前端处理它(但我会采用第一种方法). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net – SignalR跨域不在IE10以外的浏览器上工作
- asp.net-mvc – NLog在所有aspnet布局渲染器上抛出配置异常
- asp.net-mvc – 在ASP.NET MVC中创建控件外的ViewResult
- asp.net – ASP.MVC CORE网站的最大上传大小
- asp.net-mvc – 根据MVC中第一个dropdownlistfor的值启用第
- asp.net-mvc-3 – OutputCache属性和jQuery Ajax没有缓存
- asp.net-mvc – 我应该将ASP.NET MVC作为NuGet包引用吗?
- asp.net – 最有效的方式…独特的随机字符串
- WeihanLi.Npoi 1.7.0 更新
- asp.net-mvc – 使用Multipart格式的Web API模型绑定
推荐文章
站长推荐
- 使用asp.net控件创建无序列表?
- asp.net-core – VS 2015中的Asp.net核心EF
- asp.net-mvc – RenderAction应该与表单一起使用
- asp.net-mvc – 实体框架 – 如何防止创建列的模
- ASP.NET MVC 使用Spring.NET 依赖注入
- asp.net – precompiledApp.config的目的是什么?
- ILifetimeScope的autofac DependencyResolutionE
- asp.net-mvc – 如何从ASP.NET MVC 3中的授权过滤
- asp.net-mvc – WS-FED身份验证(ADFS)和ASP.NET
- asp.net-mvc – HTMLHelper,从属性中生成“Expre
热点阅读