Asp.net mvc 电子邮件地址客户端的MVC5验证
我的模型中有以下属性:Asp.net mvc 电子邮件地址客户端的MVC5验证,asp.net-mvc,validation,Asp.net Mvc,Validation,我的模型中有以下属性: [Required(ErrorMessage = "{0} is a required field.")] [StringLength(150, ErrorMessage = "There are too many characters in this field.")] [DataType(DataType.EmailAddress)] [EmailAddress] [MaxLength(150, ErrorMessage = "Maximum of 150 chara
[Required(ErrorMessage = "{0} is a required field.")]
[StringLength(150, ErrorMessage = "There are too many characters in this field.")]
[DataType(DataType.EmailAddress)]
[EmailAddress]
[MaxLength(150, ErrorMessage = "Maximum of 150 characters allowed.")]
[Display(Name = "Customer budget owner")]
public string CustomerBudgetOwner { get; set; }
所有属性都是microsoft的内置属性。
视图中的html如下所示:
<div class="form-group">
@Html.LabelFor(m => m.HardwareRequest.CustomerBudgetOwner, htmlAttributes: new { @class = "form-label" })
<div class="input-group">
<div class="input-group-addon input-group-sm">
<span>@@</span>
</div>
@Html.TextBoxFor(m => m.HardwareRequest.CustomerBudgetOwner, htmlAttributes: new { @class = "form-control input-sm", id = "txtCustomerBudgetOwner" })
<div class="input-group-addon">
<span id="btnCustomerBudgetOwnerInfo" class="glyphicon glyphicon-info-sign info-icon" data-toggle="popover" data-placement="right" data-content="Enter the email address of the budget owner."></span>
</div>
</div>
@Html.ValidationMessageFor(m => m.HardwareRequest.CustomerBudgetOwner, "", new { @class = "text-danger" })
</div>
<input class="form-control input-sm valid" data-val="true" data-val-email="The Customer budget owner field is not a valid e-mail address." data-val-length="There are too many characters in this field." data-val-length-max="150" data-val-maxlength="Maximum of 150 characters allowed." data-val-maxlength-max="150" data-val-required="Customer budget owner is a required field." id="txtCustomerBudgetOwner" name="HardwareRequest.CustomerBudgetOwner" type="text" value="" aria-required="true" aria-invalid="false" aria-describedby="txtCustomerBudgetOwner-error">
@LabelFor(m=>m.HardwareRequest.CustomerBudgetOwner,htmlAttributes:new{@class=“form label”})
@@
@TextBoxFor(m=>m.HardwareRequest.CustomerBudgetOwner,htmlAttributes:new{@class=“form control input sm”,id=“txtCustomerBudgetOwner”})
@Html.ValidationMessageFor(m=>m.HardwareRequest.CustomerBudgetOwner,“,新{@class=“text danger”})
如果我只输入几个字符而不是@字符,则会显示验证错误消息
如果我输入类似aaaa@bbbbb.ccc没有错误,因为它看起来像电子邮件地址
如果我输入类似aaaa@bbbbb未显示任何客户端错误,但在控制器中,modelstate无效
我是否在模型验证属性中出错?
还是我无法控制的事情
[编辑]
删除DataType属性后,生成的HTML如下所示:
<div class="form-group">
@Html.LabelFor(m => m.HardwareRequest.CustomerBudgetOwner, htmlAttributes: new { @class = "form-label" })
<div class="input-group">
<div class="input-group-addon input-group-sm">
<span>@@</span>
</div>
@Html.TextBoxFor(m => m.HardwareRequest.CustomerBudgetOwner, htmlAttributes: new { @class = "form-control input-sm", id = "txtCustomerBudgetOwner" })
<div class="input-group-addon">
<span id="btnCustomerBudgetOwnerInfo" class="glyphicon glyphicon-info-sign info-icon" data-toggle="popover" data-placement="right" data-content="Enter the email address of the budget owner."></span>
</div>
</div>
@Html.ValidationMessageFor(m => m.HardwareRequest.CustomerBudgetOwner, "", new { @class = "text-danger" })
</div>
<input class="form-control input-sm valid" data-val="true" data-val-email="The Customer budget owner field is not a valid e-mail address." data-val-length="There are too many characters in this field." data-val-length-max="150" data-val-maxlength="Maximum of 150 characters allowed." data-val-maxlength-max="150" data-val-required="Customer budget owner is a required field." id="txtCustomerBudgetOwner" name="HardwareRequest.CustomerBudgetOwner" type="text" value="" aria-required="true" aria-invalid="false" aria-describedby="txtCustomerBudgetOwner-error">
这是文本框中的值:sdfsdfsdf@sdfsdfsdf
模型状态:
我也发现了这个问题,即客户端和服务器端的验证规则不同。如果在模型上应用了数据注释,您会期望一致的行为,这似乎很奇怪
说我有点犹豫不决——从技术上讲,客户端验证可能更准确,但它是edge案例。在Razor声明中添加
type=“email”
是否有帮助?诚然,这只是兼容HTML5的浏览器,但现在应该是相当大的一块了。您不需要[DataType(DataType.EmailAddress)]
或[MaxLength]
属性(该属性已包含在[StringLength]
属性中)。客户端验证工作正常(请参阅)我无法复制你的说法