默认的ASP.net MVC 3 Internet应用程序模板包括以下模型:
public class RegisterModel
{
[Required]
[Display(Name = "User name")]
public string UserName { get; set; }
[Required]
[DataType(DataType.EmailAddress)]
[Display(Name = "Email address")]
public string Email { get; set; }
[Required]
[StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }
[DataType(DataType.Password)]
[Display(Name = "Confirm password")]
[Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
public string ConfirmPassword { get; set; }
}
在帐户/注册操作中,它要求提供电子邮件地址,但似乎您可以在此字段中输入任何内容,并且它会接受它。
DataType(DataType.EmailAddress)是否实际触发验证?好像它没有。如果它没有验证类型,那么它的目的是什么?
答案 0 :(得分:11)
据我所知,DataType属性仅用于格式化,但仅限于使用@Html.EditorFor(model => model.Field)
时。
模型字段,cshtml和生成的HTML的示例:
模型字段:
[Required]
[DataType(DataType.Text)]
[Display(Name = "Name")]
public string Name { get; set; }
[Required]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }
[Required]
[DataType(DataType.MultilineText)]
[Display(Name = "Description")]
public string Desc { get; set; }
CSHTML:
<div class="form-section">
@Html.LabelFor(x => x.Name)
@Html.EditorFor(x => x.Name)
</div>
<div class="form-section">
@Html.LabelFor(x => x.Password)
@Html.EditorFor(x => x.Password)
</div>
<div class="form-section">
@Html.LabelFor(x => x.Desc)
@Html.EditorFor(x => x.Desc)
</div>
结果HTML:
<div class="form-section">
<label for="Name">Name</label>
<input class="text-box single-line" id="Name" name="Name" type="text" value="">
</div>
<div class="form-section">
<label for="Password">Password</label>
<input class="text-box single-line password" id="Password" name="Password" type="password" value="">
</div>
<div class="form-section">
<label for="Desc">Description</label>
<textarea class="text-box multi-line" id="Desc" name="Desc"></textarea>
</div>
我知道这是一篇很老的帖子,但也许我可以通过这种方式为其他人的情况发光了
编辑:
可以附加一些验证,但只有客户端。不要依赖这些属性进行实际验证,这应该始终在服务器端完成(客户端仅用于用户体验)
答案 1 :(得分:3)
当前版本的MVC3中没有与DataType属性相关联的验证。 MVC Futures中显示了从此属性派生的新属性,并添加了此验证过程。 (例如EmailAdressAttribute)
答案 2 :(得分:0)
默认模板不会将正确的Validate.js脚本添加到母版页。数据注释只输出javascript读取的HTML以进行客户端验证。
在您的控制器操作中,您需要执行Model.IsValid以确保验证服务器端。
答案 3 :(得分:0)
我无法使该验证器工作,最终编写自己的one found on the ASP.net site。据推测,MVC3 Future中提供了[EmailAddress]注释。
答案 4 :(得分:0)
使用editorfor()
时,模板化视图使用DataType属性答案 5 :(得分:0)
DataType属性不是验证属性。它们用于模板化。恩。您可以使用DataType.Email的html 5电子邮件标签。 JakeJ详细介绍了它。