代码之家  ›  专栏  ›  技术社区  ›  MattSlay

NETMVC对DateTime进行自动模型验证,但没有其他验证

  •  1
  • MattSlay  · 技术社区  · 16 年前

    我将mvc2与我构建的LinqToSql项目中的一些模型一起使用。我看到,当我在编辑了一个包含模型中的DateTime字段的表单后,将其发回控制器操作时,MVC Html.ValidationMessageFor()助手会在日期文本框旁边很好地显示一个错误。

    当您在Controller操作中测试ModelState.IsValid()时,这似乎会自动发生,就好像MVC模型绑定自动知道DateTime字段不能为空一样。我的问题是。。。在这些LinqToSql生成的类中,我还有一些不可为null的字符串字段(在传递到LinqToSql生成的类的Sql Server中标记为不可为null),那么为什么Mr.MVC不也处理这些字段,并在我为这些字段添加的ValidationMessageFor()占位符中显示一条“Required”消息呢,就像它对DateTime字段一样?

    当然,我已经成功地添加了MetadataType(typeof<t>)buddy类覆盖了这些不可为null的字符串字段,但是当LinqToSql生成的类已经包含了MVC可以嗅出的足够信息时,在buddy类中添加所有这些元数据确实显得多余,就像在DateTime中一样。如果MVC验证可以自动与DateTime一起工作,那么为什么这些不可为null的字段不也可以呢?

    2 回复  |  直到 16 年前
        1
  •  2
  •   Robert Koritnik    16 年前

    AFAIK所有值类型的动作参数都是自动需要和验证的,而引用类型的动作参数则不是。它们通过一些验证提供程序(如DataAnnotations)进行验证。

        2
  •  0
  •   Felix    16 年前

    既然您提到了ValidationMessageFor(),我假设您在表单上有这个字段(在mvc2的后续版本中有一个更改,如果该字段不在视图中,那么model中的“required”实际上不是必需的)。

    我注意到的另一个原因是MVC先生可能注意到有一个错误;但是消息被DataAnnotation设置或ValidationMessageFor()本身抑制。我现在不记得细节了,但是我很疑惑为什么没有消息,发现只是验证消息本身是空的。

    拿起。。。如果是真的-我从来没有见过这样的事情(字段定义为必需的,但没有检测到错误);但我主要和EF一起工作。虽然我希望LinqToSql的行为是一样的,但我没有第一手的经验