对 ASP.Net MVC 验证进行故障排除?电子邮件验证电话不

Posted

技术标签:

【中文标题】对 ASP.Net MVC 验证进行故障排除?电子邮件验证电话不【英文标题】:Troubleshooting ASP.Net MVC validation? Email validates telephones do not 【发布时间】: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.jsjquery.validate.unobtrusive 是没有意义的。什么是验证你期待吗?你是说[RequiredIf][RegularExpression] 不起作用? 我没有注意到缺少数据值。不知道为什么或在哪里被禁用。我不是故意的。 它们都不工作 如果没有将规则添加到$.validator 所必需的data-val-* 属性,它们肯定无法在客户端工作 可能是 3 个可能的原因之一 - 在 web.config 中,您有 &lt;add key="ClientValidationEnabled" value="false"/&gt;(而不是 true)。在Application_Start()Global.asax 中,您有HtmlHelper.ClientValidationEnabled = false;。在视图或其布局中,您有 @ Html.EnableClientValidation(false); 【参考方案1】:

Expressive Annotations 的部分安装/卸载导致默认验证提供程序被删除,而没有添加替换。不知道为什么会发生部分安装。我刚刚添加了适当的提供程序,一切都按预期工作。

【讨论】:

以上是关于对 ASP.Net MVC 验证进行故障排除?电子邮件验证电话不的主要内容,如果未能解决你的问题,请参考以下文章

从 Twitter API 获取用户的电子邮件以进行外部登录身份验证 ASP.NET MVC C#

ASP.NET MVC 客户端电子邮件验证不起作用

远程验证在 ASP.NET MVC 5 中不起作用

需要帮助对 linux Docker 中的 .NET Core 2.1 API 进行故障排除

asp.net mvc模式中 怎么对文本框进行验证

如何在 asp.net mvc 中验证 PayPal 企业电子邮件是不是正确