Html 将DataTypeAttribute与DataType.EmailAddress一起使用,无需验证

Html 将DataTypeAttribute与DataType.EmailAddress一起使用,无需验证,html,validation,asp.net-mvc-5,data-annotations,Html,Validation,Asp.net Mvc 5,Data Annotations,查看关于[DataType(DataType.EmailAddress)]和验证的几乎所有问题,您会发现有人指出该属性不是用于验证的,而是允许将属性呈现为与DisplayFor的mailto链接或带有EditorFor的HTML 5“email”输入类型。唯一的问题是该属性不会导致验证。在我的视图模型中,我具有以下属性: [DataType(DataType.EmailAddress, ErrorMessage="Invalid e-mail address")] [Required] [Str

查看关于
[DataType(DataType.EmailAddress)]
和验证的几乎所有问题,您会发现有人指出该属性不是用于验证的,而是允许将属性呈现为与DisplayFor的mailto链接或带有EditorFor的HTML 5“email”输入类型。唯一的问题是该属性不会导致验证。在我的视图模型中,我具有以下属性:

[DataType(DataType.EmailAddress, ErrorMessage="Invalid e-mail address")]
[Required]
[StringLength(256, ErrorMessage = "The email address is too long")]
public string EmailAddress { get; set; }
并在登记表上显示为:

<div>
    *E-MAIL ADDRESS
    @Html.EditorFor(m => regVM.EmailAddress)
    @Html.ValidationMessageFor(m => regVM.EmailAddress)
</div>

*电子邮件地址
@EditorFor(m=>regVM.EmailAddress)
@Html.ValidationMessageFor(m=>regVM.EmailAddress)
这将呈现一个HTML5“email”类型的输入,这是我想要的,也是我包含DataTypeAttribute的原因。但是,如果我在电子邮件输入中输入值“asdf”,它会显示验证错误消息:
请输入有效的电子邮件地址。
请注意,该属性不仅会导致验证,而且会忽略我提供的错误消息(最初,我认为这不是验证属性,所以没有包含该消息)我知道您可以使用EmailAddressAttribute指定自定义验证消息,但这不是我的问题

我想我是想

  • 添加到web知识库中,尽管属性可能没有 用于验证,它肯定包括它(如果确实是这样的话)
  • 问:“有没有办法禁用此验证?”
  • 想一想,如果要进行验证(这是有意义的,因为DataTypeAttribute继承自ValidationAttribute),它为什么会忽略ErrorMessage参数?这好像是一个错误。它基本上说,“我是一个验证属性……但只是一点点”
  • 注意:我在测试期间启用了不引人注目的客户端验证

    编辑

    所以我决定再做一次测试。我从页面中删除了jquery.validate.js和jquery.validate.unobtrusive.js。现在我可以提交一个无效的电子邮件地址,ModelState.IsValid为true;它不会验证电子邮件地址格式。因此,这可能是客户端验证脚本的一个错误。

    为什么不将输入类型设置为“text”,如果您不希望它验证“@”和“.com”,您还想将其设置为电子邮件?对于第三个问题,它不应该停止未被“email”属性捕获的错误消息。“email”属性只是查找“string”++“string”++.com或.net等。但不是寻找输入注入之类的东西,而是更多地控制我的验证代码,不出现不需要的验证,以及(请参阅我的编辑)让客户端验证与服务器端验证匹配。除此之外,无论您的业务/验证逻辑如何,您都应该能够创建有效的HTML5表单#3、不确定您所说的“电子邮件”属性是什么意思。我说的是DataTypeAttribute,不是EmailAddressAttribute。但我并不是说这会妨碍其他验证。电子邮件输入类型将执行基本的浏览器相关验证,因为这就是它的用途。如果您不想这样做,请使用“文本”。@Shoe ASP.NET MVC在表单上包含novalidate属性。这是ASP.NET MVC验证,而不是浏览器验证