使用派生类和dataAnnotations进行软验证

时间:2011-11-21 22:48:01

标签: c# asp.net-mvc-3 interface model data-annotations

今天有个很酷的主意,但我不知道该怎么做。

我正在asp.net MVC3 C#中逐页构建一个页面,保存到每个页面末尾的临时区域。

现在这个数据进入了一个包含几个可枚举类的类,所以它相对复杂。

现在,我希望用户能够在没有验证的情况下放入他们想要的任何东西(显然除了安全性),这样他们就可以投入任何他们想要的东西,但是我希望这可以进行软验证。

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

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

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

所以,最后:

  1. 是否可以打开和关闭界面,如果是,怎么做?
  2. 我如何将classA转换为classB,其中classB派生自classA并使用dataAnnotations
  3. (续2)在转换过程中,我将如何捕获任何数据错误并列出它们
  4. 如何在模型为classA
  5. 的表单上对classB进行软验证

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


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


    更新2 如果有人可以贡献,我仍在寻找答案

1 个答案:

答案 0 :(得分:0)

我认为你不能用MVC中的验证框架做到这一点。验证是二进制操作;输入有效或不有效。用于表示验证过程中成功或失败的ValidationResult类没有“可能”成员(使用术语),它是“是”还是“是”。

也就是说,由于您可以控制整个验证过程,因此您可以随时定义自己的一组数据注释属性,并在控制器中测试我认为是“警告”的内容,并做出相应的反应,也许通过使用显示字符串的通知区域,例如“我们建议您在此字段中输入数据”或类似的内容。

这假设您没有使用不显眼的客户端验证,我不确定如何规避。我正在谈论在控制器中使用ModelState变量,使其超越IsValid测试。