【发布时间】:2019-02-21 16:50:04
【问题描述】:
我有一个正在加载以下库的页面:
<script src="/Scripts/jquery-3.3.1.js"></script>
<script src="/Scripts/jquery-migrate-3.0.0.js"></script>
<script src="/Scripts/jquery-ui-1.12.1.js"></script>
<script src="/Scripts/jquery.validate.js"></script>
<script src="/Scripts/jquery.validate.unobtrusive.js"></script>
<script src="/Scripts/expressive.annotations.validate.js"></script>
表单有几个需要验证的字段。
<div class="row">
<div class="small-12 large-4 column end">
<label class="label radius" for="PrimaryPhone">Home Phone</label>
<input class="text-box single-line" id="PrimaryPhone" name="PrimaryPhone" placeholder="(###) ###-####" type="tel" value="" />
<span class="field-validation-valid" data-valmsg-for="PrimaryPhone" data-valmsg-replace="true"></span>
</div>
</div>
<div class="row">
<div class="small-12 large-4 column en">
<label class="label radius" for="OtherPhone">Other Phone</label>
<input class="text-box single-line" id="OtherPhone" name="OtherPhone" placeholder="(###) ###-####" type="tel" value="" />
<span class="field-validation-valid" data-valmsg-for="OtherPhone" data-valmsg-replace="true"></span>
</div>
</div>
<div class="row">
<div class="small-12 large-4 column end">
<label class="label radius" for="WorkPhone">Work Phone</label>
<input class="text-box single-line" id="WorkPhone" name="WorkPhone" placeholder="(###) ###-####" type="tel" value="" />
<span class="field-validation-valid" data-valmsg-for="WorkPhone" data-valmsg-replace="true"></span>
</div>
</div>
<div class="row">
<div class="medium-6 small-12 end column">
<label class="label radius" for="EmailAddress">Email Address</label>
<input class=" text-box single-line" id="EmailAddress" name="EmailAddress" type="email" value="" />
<span class="field-validation-valid text-danger" data-valmsg-for="EmailAddress" data-valmsg-replace="true"></span>
</div>
</div>
验证基于 ViewModel
[Display(Name = "Email Address")]
[DataType(DataType.EmailAddress)]
[EmailAddress(ErrorMessage ="Invalid Email Address")]
[RegularExpression(@"([\w\.\-_]+)?\w+@[\w-_]+(\.\w+){1,}", ErrorMessage = "Invalid Email Address")]
public string EmailAddress { get; set; } [Display(Name = "Other Phone")]
[DataType(DataType.PhoneNumber)]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:###-###-####}")]
[RequiredIf("PrimaryPhone==null && WorkPhone==null", ErrorMessage ="You must enter at least one phone number.")]
[RegularExpression(@"(?!(?:1-)?(\\$|#|800|833|844|855|866|877|888|900|0))\(?[\\s.-]*([0-9]{3})?[\\s.-]*\)?[\\s.-]*[0-9]{3}[\\s.-]*[0-9]{4}", ErrorMessage = "Please enter a valid phone number")]
public string OtherPhone { get; set; }
电子邮件地址可以正确验证,但手机不能。远程验证属性也已停止工作。
****添加了生成上述剃须刀代码的sn-p
@Html.LabelFor(model => model.PrimaryPhone, htmlAttributes: new { @class = "label radius" })
@Html.EditorFor(model => model.PrimaryPhone, new { htmlAttributes = new { placeholder = "(###) ###-####" } })
@Html.ValidationMessageFor(model => model.PrimaryPhone)
【问题讨论】:
-
您显示的 html 没有用于客户端验证的
data-val-*属性,因此我假设您已禁用它(但包含jquery.validate.js和jquery.validate.unobtrusive是没有意义的。什么是验证你期待吗?你是说[RequiredIf]或[RegularExpression]不起作用? -
我没有注意到缺少数据值。不知道为什么或在哪里被禁用。我不是故意的。
-
它们都不工作
-
如果没有将规则添加到
$.validator所必需的data-val-*属性,它们肯定无法在客户端工作 -
可能是 3 个可能的原因之一 - 在
web.config中,您有<add key="ClientValidationEnabled" value="false"/>(而不是true)。在Application_Start()的Global.asax中,您有HtmlHelper.ClientValidationEnabled = false;。在视图或其布局中,您有@{ Html.EnableClientValidation(false); }
标签: jquery asp.net-mvc unobtrusive-validation