2011-11-21 68 views
1

今天有一个非常酷的想法,但我不知道如何去做。使用派生类和数据注释进行软验证

我在asp.net MVC3 C#中建立一页一页的表单,保存到每页末尾的临时区域。

现在这个数据进入一个有几个枚举类的类,所以它相对复杂。现在,我希望用户能够放入任何他们想要的东西而不需要验证(显然安全除外),这样他们就可以抛出任何他们想要的东西,但是我希望这可以通过软验证。

我想使用元数据进行验证,但是由于这提供了硬性验证,我不能把它放在窗体用作模型的类上(强类型)。所以,我认为最好的办法是从表单上的类中派生出一个类,然后抛出数据注释(我希望它可能以某种方式应用一个接口,但我假设它不是)

然后,当用户想要提交表单到我们的数据库,我希望表单通过和验证。我想通过将没有数据注解的类转换成dataAnnotations为空的类,并且发生的任何错误(基本上是数据无效时)生病都能够在屏幕上列出并告诉他们来解决它。

现在,我希望能够做的另一件事是,我可以以某种方式使用注释类来软验证窗体,当用户在上面。所以我可以说“我们建议你把这个领域放进去”。而不是,“这个领域不能是空的”。

所以,结论是:

  1. 是否可以打开和关闭接口,如果是的话,怎么样?
  2. 我将如何转换CLASSA成CLASSB其中CLASSB从ClassA的派生和使用dataAnnotations
  3. 在转换期间(2续),我将如何捕捉任何数据错误,并列出他们
  4. 我怎么会软验证关闭classB的形式,其中模型是类A

我希望这是所有可能的。这似乎是最干净的方式。如果有人能想到更好的方法来做到这一点,我都是耳朵......或眼睛。


更新的印象是dataAnnotations会阻止我把任何不正确的数据在1 林,但是我做的那一刻一些测试,似乎我能够以编程方式应用不正确的数据。即在必填字段中为null。那么数据注释只适用于页面上的验证吗?如果是这样,不要理会我的整个问题。


更新2 我还在寻找一个答案,如果任何人都可以贡献

回答

0

我不认为你可以在MVC验证框架做到这一点。验证是一种二元操作;输入是有效的或不是。在验证过程中用于指示成功或失败的ValidationResult类没有“可能”成员(使用术语),它可以是或不是。这就是说,由于您可以控制整个验证过程,因此您可以随时定义您自己的一组数据注释属性,并在您的控制器中测试我所假设的“警告”,并做出相应的反应,也许通过使用显示如“我们建议您在这个领域”或类似的东西输入数据串的通知区域。

这是假设你不使用不显眼的客户端验证,这我不会确定如何规避我在说的是在你的控制器中使用ModelState变量,你可以超越IsValid测试

+0

感谢您的观察,是一个很好的...我知道验证是一个二元操作。我更注重检查我是否得到了真实或虚假的信息,但仍然能够提交。 – MrJD