【问题标题】:ASP .Net MVC jQuery validation does not work on form submit but works onfocusoutASP .Net MVC jQuery 验证不适用于表单提交,但适用于focusout
【发布时间】:2014-11-20 00:48:52
【问题描述】:

这快把我逼疯了。目前正在开发新的 ASP .Net MVC 项目并修复客户端验证。这不是我第一次使用它,关于不显眼的验证有很多关于 SO 的问题,我想我已经全部阅读了。

  1. 表单是使用Html.BeginForm 创建的
  2. web.config ClientValidationEnabled 和 UnobtrusiveJavaScriptEnabled 设置为 true
  3. 为我的模型Results 属性添加了属性(简单的Required 属性)
  4. 所有必要的脚本都以正确的顺序包含:jquery、jquery.validate.js,然后是jquery.validate.unobtrusive.js
  5. 在我看来,我使用

@Html.TextAreaFor(model => model.Results) @Html.ValidationMessageFor(model => model.Results)

  1. HTML 中存在不显眼的验证属性。

HTML:

<textarea class="input-validation-error" cols="20" data-val="true" data-val-required="Results is required." id="Results" name="Results" rows="2"></textarea>

问题在于验证确实有效,但仅在输入值更改时有效,但当单击提交按钮时,所有错误都将被忽略并发布表单。所以我尝试更改一些验证器配置。

var settngs = $.data($('form')[0], 'validator').settings;
settngs.onsubmit = function (element) { $(element).valid(); };

或者类似的东西:

$('form').validate({
    onsubmit: function (element) {
        this.element(element);
    }
});

通常,onfocuout 有问题,但submit 没有问题。我会忘记或错过什么?

【问题讨论】:

  • 你包括@Html.ValidationMessageFor(m =&gt; m.Results)吗?
  • 我建议在浏览器上查找控制台。如果 javascript 中有任何语法错误,您的脚本可能根本无法运行,从而允许 elemento 执行默认行为。
  • 是ajax表单提交还是普通表单提交?
  • @Rudresh,这是通常的表单提交,我使用 Html.BeginForm。我不需要 unobtrusive.ajax。
  • @FabianoAraujo,控制台很清晰,没有错误

标签: jquery asp.net-mvc validation


【解决方案1】:

如果您想通过 DataAnnotation 方法检查视图中的控件是否有效,则在模型中写入属性时,请使用 HTML.Helper

“@Html.TextAreaFor(model => model.Property) @Html.ValidationMessageFor(model => model.Property)”

这将为您执行验证

不要像你写的那样使用html标签

“&lt;textarea&gt;...&lt;/textarea&gt;”

【讨论】:

  • 我使用了TextAreaFor 和ValidationMessageFor。我已经提供了已经渲染的 html。
  • 我是说我已经在使用它们了。我提供了&lt;textarea&gt;... html 来证明渲染后它们具有框架生成的必要验证属性。并且仍然验证在提交时不起作用。
【解决方案2】:

使用下面的代码并尝试

$(document).ready(function () {
        var actForm = $("#" + "FormID");
        actForm.data('validator').settings.ignore = '';

        $("#FormID").submit(function () {
            if ($("#FormID").valid() == false) {
               //error
            }
        });
    });

【讨论】:

  • 那是“拐杖”。我想找到问题的根源。
【解决方案3】:

好吧,我终于找到了问题所在。如果输入值为null,则有一些损坏的自定义客户端验证属性会引发异常。当您尝试更改可验证输入的值时 - 属性工作正常,因为值为 not null,但是当您提交带有空输入的表单时,它会抛出 UNLOGGED by console 异常并将帖子发布到服务器。这显然是本地的,我试图删除这个问题,但我认为如果有人遇到类似的问题会很有用。 请记住在客户端调试您的自定义验证属性,因为由它们引起的异常onsubmit 不会被控制台记录。

【讨论】:

    猜你喜欢
    • 2017-05-30
    • 1970-01-01
    • 2014-07-14
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 2019-01-14
    • 2017-06-22
    • 2020-04-27
    相关资源
    最近更新 更多