【问题标题】:ValidationMessageFor not rendering error messageValidationMessageFor 不呈现错误消息
【发布时间】:2013-01-24 18:28:59
【问题描述】:

我有一个局部视图:

 @Html.EditorFor(model => model.BM)
 @Html.ValidationMessageFor(model => model.BM)

在主视图中,如果我这样做:

@using (Html.BeginForm())
{
   @Html.Partial("QuoteStep1", Model)
}

然后调用 $('form').validate() 验证表单,如果我不填写数据会显示错误消息。

但是,如果我改为使用 AJAX 调用加载部分视图,则调用 $('form').validate() 仍然有效(它正确返回 true 或 false)但不再显示错误消息!

我在某处读到我应该将以下内容添加到部分视图的顶部:

@if (this.ViewContext.FormContext == null) 
{
   this.ViewContext.FormContext = new FormContext(); 
 }

但是一点效果都没有。

[编辑:我的研究更新]

经过2个多小时的调试,我发现了一些东西。首先,因为我使用 AJAX 请求加载表单的内容,所以新添加的 HTML 控件不是 DOM 的一部分。因此,jquery 验证器无法知道这些控件。

因此,在 AJAX 成功回调中添加以下代码行应该可以解决问题:

$.validator.unobtrusive.parse($('form'));

这是在 AJAX 结果添加到 DOM 之后立即设置的。

当我进一步调试验证器时,我可以看到代码被调用:

 $(selector).find(":input[data-val=true]").each(function () {
            $jQval.unobtrusive.parseElement(this, true);
        });

意思是,它找到了新添加的输入框。

在 $jQval.unobtrusive.parseElement 方法中,下面的代码被命中:

 this.adapt({
                    element: element,
                    form: form,
                    message: message,
                    params: paramValues,
                    rules: rules,
                    messages: messages
                }); 

元素是我的文本框,表单是视图表单,消息是“BM 必须是数字”。所以我觉得一切都很好。

但是你猜怎么着......验证错误消息仍然没有出现!

请有 jquery 大师帮忙吗? :)

【问题讨论】:

  • 好问题。伟大的研究。
  • 引用 OP: “调用 $('form').validate() 验证表单” :: 这不是真的。 $('form').validate()初始化表单上的插件。
  • 引用 OP: “调用$('form').validate() 仍然有效(它正确返回真或假),但不再显示错误消息”: :$('form').valid() 是您用于以编程方式触发验证测试的方法(显示消息)
  • 也许我的解释不准确,但事实是我仍然需要使用 validate() 来实现我的目的,而不是不执行实际验证的 valid() 函数。顺便说一句,我仍然卡住了:)
  • $.validator.unobtrusive.parse($('form'));之前你必须先调用$('form').data('validator', null);来移除现有的验证器

标签: jquery asp.net-mvc asp.net-mvc-4 jquery-validate unobtrusive-validation


【解决方案1】:

我也对这个问题进行了很多研究,我发现它对我有帮助: 只需添加 $("#myForm").valid(); 与:

<script src='@Url.Content("~/Scripts/jquery.validate.js")' type='text/javascript'></script>
<script src='@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")' type='text/javascript'></script>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-21
    • 1970-01-01
    • 2013-06-19
    • 1970-01-01
    相关资源
    最近更新 更多