MVC 3客户端验证捕获一些ValidationAttributes而不是其他人?

时间:2012-02-03 00:47:35

标签: asp.net-mvc-3

我对此行为感到困惑:

我有一个开箱即用的MVC3应用程序。我还没有真正完成脚手架模板给我的任何定制。

在web.config中,clientsidevalidationenabled和unobtrusivevalidation都是真的。

我有一个类,其中一个字段使用必需注释,一个使用 StringLength ,另一个使用 RegularExpression 。当我编辑一个对象时,标有StringLength&的属性的文本框。正则表达式会立即在UI中报告问题,但是必需的文本框没有。

如果我点击SAVE,那么" Model.IsValid"是控制器找到缺少必需的问题,我得到文本框旁边的UI错误消息。

如果我查看页面的来源,我可以看到所需属性的标记确实具有dataval-req和Unobtrusive验证生成的其他相关属性。

这是预期的行为吗?如果是,那是什么原因?如果不是,那我可能做错了什么?

谢谢! :)

2 个答案:

答案 0 :(得分:1)

只要页面没有回发到服务器,这应该是正确的行为。只有在以下情况下才会触发所需的客户端验证:

  1. 您不输入数据并尝试发布到服务器。
  2. 您在文本框中输入数据,然后将其删除。
  3. 否则,用户将被淹没错误消息。

答案 1 :(得分:1)

我已经触及了这种行为的底部,只是敲了几下键盘。这是预期的。在“创建”视图中,行为与@Beavis描述的一样。在编辑视图中,不显眼的验证可防止在第一次尝试点击SAVE之前在Tab键上验证所需的属性。然后SAVE进行UI验证(不发生回发)并显示属性旁边的错误消息。一旦我第一次点击保存,该属性就会响应标签。所以现在如果我使它有效,消息就会消失在选项卡上。如果我删除了文本框的内容,则消息会重新显示在选项卡上。

感谢大家的帮助。