我想MVC的数据类型属性,就创建了一个简单的场景,像下面这样:为什么验证不能使用Html.TextBoxFor,而是使用Html.EditorFor?
的查看:
@model MVC4.Models.Model
@{
ViewBag.Title = "DataTypeAttribute";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<script src="~/Scripts/jquery-1.8.2.min.js"></script>
<script src="~/Scripts/jquery.validate.min.js"></script>
<script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>
<h2>DataTypeAttribute</h2>
@using (Html.BeginForm("SubmitData", "Home"))
{
<div>
@Html.ValidationSummary()
</div>
@Html.EditorFor(m => m.Email)
<br />
<br />
@Html.EditorFor(m => m.PostalCode)
<br />
<br />
@Html.EditorFor(m => m.TextOnly)
<br />
<br />
<button type="submit">Submit</button>
}
的型号:
public class Model
{
[DataType(DataType.EmailAddress)]
[Required]
//[EmailAddress]
public string Email { get; set; }
[DataType(DataType.PostalCode)]
public string PostalCode { get; set; }
public string TextOnly { get; set; }
}
“SubmitData”只是一个控制器,如果ModelState.IsValid为false,则返回View(...,model)。
尽管像this岗位做应对之间Html.TextBoxFor和Html.EditorFor差异一份好工作,我无法找到一个答案,为什么使用TextBoxFor时为数据类型EmailAddress的验证将无法正常工作。我确实发现人们提到TextBoxFor不考虑元数据,而EditorFor。
但这有意义吗?所以TextBoxFor不支持客户端验证?!
我想知道两者之间的区别是什么原因?
总结答案:HTML 5引入的新输入类型,如添加自动验证。 TextBoxFor总是生成'text'类型的输入,因此不会生成内置的验证。另一方面,当为其生成html时,EditorFor将模型字段元数据(数据注释)考虑在内,因此标有“DataType(DataType.EmailAddress)”的字段将生成输入类型='email',因此新内置HTML 5验证以及它。 – Veverke