ValidationAttribute具有条件参数值

时间:2013-07-29 15:45:36

标签: validation c#-4.0 attributes

我是ValidationAttributes的新手。我想开发一个ValidationAttribute子类(MustExistAttribute),它根据运行时的情况使用两种方法之一。例如,我有一个名为RECORD的类,其中包含一个名为KEY的属性,我希望验证测试类似于“在数据库中查找此KEY并查看它是否存在”。

然而,仅凭这一点还不够。我还需要测试另一个属性(RECORD.IsNew)。然后,如果也是如此,则此KEY存在的事实是错误,但如果RECORD.IsNew为false,则验证应该通过。换句话说,属性的IsValid覆盖不仅需要访问框架自动提供的值(KEY),还需要访问RECORD(或RECORD.IsNew)。

这可能吗?

1 个答案:

答案 0 :(得分:0)

我认为我的问题的答案是“不”。但是有一种解决方法。

在已经应用验证的地方,即我通常会有类似

的地方

if( ModelState.IsValid)

,我可以添加我想要的任何测试,然后使用类似

的内容

ModelState.AddModelError( "KEY", "The database already has a record for the new KEY." );

AddModelError会将IsValid设置为false,因此我可以重新测试并从那里开始。该框架处理我的新错误,就像处理所有其他错误一样,将其与KEY属性相关联。