我是ValidationAttributes的新手。我想开发一个ValidationAttribute子类(MustExistAttribute),它根据运行时的情况使用两种方法之一。例如,我有一个名为RECORD的类,其中包含一个名为KEY的属性,我希望验证测试类似于“在数据库中查找此KEY并查看它是否存在”。
然而,仅凭这一点还不够。我还需要测试另一个属性(RECORD.IsNew)。然后,如果也是如此,则此KEY存在的事实是错误,但如果RECORD.IsNew为false,则验证应该通过。换句话说,属性的IsValid覆盖不仅需要访问框架自动提供的值(KEY),还需要访问RECORD(或RECORD.IsNew)。
这可能吗?
答案 0 :(得分:0)
我认为我的问题的答案是“不”。但是有一种解决方法。
在已经应用验证的地方,即我通常会有类似
的地方 if( ModelState.IsValid)
,我可以添加我想要的任何测试,然后使用类似
的内容 ModelState.AddModelError( "KEY", "The database already has a record for the new KEY." );
AddModelError会将IsValid设置为false,因此我可以重新测试并从那里开始。该框架处理我的新错误,就像处理所有其他错误一样,将其与KEY属性相关联。