2013-07-29 22 views
0

我是ValidationAttributes的新手。我想开发一个ValidationAttribute子类(MustExistAttribute),它可以以两种方式之一运行,具体取决于运行时情况。例如,我有一个名为RECORD的类,名为KEY,我希望验证测试类似于“在数据库中查找该KEY并查看它是否存在”。带条件参数值的ValidationAttribute

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

这可能吗?

回答

0

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

在设置了验证已经应用的点,即,在那里我会常碰到这样的

if(ModelState.IsValid)

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

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

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