使用DataType.EmailAddress时出现奇怪的MVC 4验证行为

时间:2013-07-16 05:50:54

标签: validation asp.net-mvc-4 jquery-validate data-annotations unobtrusive-validation

我正在使用不显眼的javascript和数据注释进行验证,它运行正常。我决定用DataType属性装饰我的视图模型属性。在大多数情况下,这是好的,但DataType.EmailAddress

除外

当我添加这个属性时,我突然在这个字段上得到额外的验证,这会在字段上调用一个调用,就像Ajax Control工具包中的验证调用一样。只有样式与要验证的元素的粗红色边框不同,标注在下面。调出还会显示未在我的视图模型中指定的消息。我有用于验证的正则表达式的错误消息“您输入的电子邮件地址无效”,而标注中的消息是“您必须输入有效的电子邮件地址”。我已经尝试搜索我的解决方案的文本,但没有找到。最后我加载的唯一脚本是:

<script src="/Public/javascript/jquery-1.9.1.js" type="text/javascript"></script>
<script src="http://code.jquery.com/jquery-migrate-1.0.0.js"></script>
<script src="/Public/javascript/jquery.unobtrusive-ajax.js" type="text/javascript"></script>
<script src="/Public/javascript/jquery.validate.js" type="text/javascript"></script>
 <script src="/Public/javascript/jquery.validate.unobtrusive.js" type="text/javascript"></script>

和css:

<link href="/Public/themes/ui-darkness/jquery-ui-1.9.2.custom.min.css" rel="stylesheet" type="text/css" />
<link href="/Content/PagedList.css" rel="stylesheet" type="text/css" />
    <link href="/Public/css/reset.css" rel="stylesheet" type="text/css" />

我也在使用@ Html.EditorFor在我的视图中渲染我的所有字段。

任何人都可以了解正在发生的事情吗?这个标注来自哪里?我可以禁用吗?我可以使用它并将其放在我的其他领域吗?我应该删除DataType.EmailAddress吗?

1 个答案:

答案 0 :(得分:4)

在ASP.NET MVC 4中,当您使用[DataType(DataType.EmailAddress)]修饰属性时,相应的EditorFor将生成一个带type="email"的输入字段:

<input type="email" name="foo" value="bar@baz.com" />

这是一些现代浏览器支持的HTML5。因此,如果您正在使用现代浏览器浏览您的网站,则此验证会自动内置。它与ASP.NET MVC完全无关。当然,如果浏览器不理解type="email"字段,它只会将其视为一个简单的文本字段。

以谷歌浏览器查看this fiddle out为例。