0

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

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

那可能吗?

4

1 回答 1

0

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

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

if( ModelState.IsValid)

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

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

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

于 2013-07-30T16:41:27.887 回答