MVC 4客户端验证未触发

Posted

技术标签:

【中文标题】MVC 4客户端验证未触发【英文标题】:MVC 4 Clientside Validation not firing 【发布时间】:2013-11-23 16:52:48 【问题描述】:

我有一个包含 RenderPartial 标记的视图。在部分视图中,我有一个表单,但客户端表单验证在服务器请求之前没有触发。服务器端验证工作正常。这很奇怪,因为我有其他观点,但没有完美工作的 RenderPartials。似乎当我包含 RenderParial 时,它似乎会导致验证停止工作。

顺便说一句 - 我已将两个 webconfig 设置都设置为 true:

<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusivejavascriptEnabled" value="true" />

此外,模型已更新为包含 [必需] 属性。这是一个快照:

[Required]
[CreditCard]
public string CardNumber  get; set; 

[Required]
[Display(Name = "Name on card")]
public string CardHolder  get; set; 

[Required]
public string Address  get; set; 

这里是父sn-p:

@if (ViewBag.tabvalue.Equals("billing"))

<div>
    <p>
        @html.RenderPartial("_BillingInfo");
    </p>
</div>

这是子部分视图(我删除了一些字段以减少复制量):

@model MVC4.Models.ClientCreditCard

@using (Html.BeginForm("CreditCard", "Client", FormMethod.Post, new  ))

    @Html.AntiForgeryToken()

    <fieldset style="color:white">
        <legend></legend>
        <div style="color:white;clear:left">@Html.ValidationSummary(true)</div>

        <div class="editor-label">
            @Html.LabelFor(model => model.CardNumber)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.CardNumber)
            @Html.ValidationMessageFor(model => model.CardNumber)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.CardHolder)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.CardHolder)
            @Html.ValidationMessageFor(model => model.CardHolder)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.Address)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Address)
            @Html.ValidationMessageFor(model => model.Address)
        </div>

        <p>
            <input type="submit" value="Submit" />
        </p>
    </fieldset>

提前感谢您的帮助!

【问题讨论】:

【参考方案1】:

在我看来,您没有在视图中包含 JQuery 验证文件。 因此,您的客户端验证不起作用。您需要在视图中编写以下代码。

@section scripts 
    @Scripts.Render("~/bundles/jqueryval")

【讨论】:

【参考方案2】:

如果满足以下条件,客户端验证应该可以正常工作:

    jquery.validate.js , validate.unobtrusive.js 包括 ClientValidationEnabled, UnobtrusiveJavaScriptEnabled 设置为 是的 表单应在document.ready 触发之前加载

RenderPartial 如果您的表单以正常方式加载,则不会引起问题。我的意思是您是否使用 ajax 加载表单(您的表单在document.ready 触发后加载)?如果是,那么您应该通过添加手动解析表单:

$.validator.unobtrusive.parse('<your_form_selector>');

注意: 由 jquery 验证器正确解析的表单将具有 novalidate="novalidate" 属性。检查您的表单是否有一个开始解决问题。

【讨论】:

以上是关于MVC 4客户端验证未触发的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET MVC 项目中的客户端验证未验证规则

ASP.NET 自定义验证器客户端和服务器端验证未触发

CustomValidator 客户端验证功能未触发

.Net Mvc 3 触发器(提交按钮除外)不显眼的验证

不提交表单的 MVC 表单验证

ASP.NET MVC5 Bootstrap 3 模态表单未验证客户端并回发到页面