ASP .Net MVC jQuery验证不适用于表单提交,但适用于focusout

时间:2014-11-20 00:48:52

标签: jquery asp.net-mvc validation

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

  1. 使用Html.BeginForm
  2. 创建表单
  3. web.config ClientValidationEnabledUnobtrusiveJavaScriptEnabled设置为true
  4. 向我的模型Required属性
  5. 添加了属性(简单Results属性)
  6. 所有必需的脚本都包含在正确的顺序中:jqueryjquery.validate.js,然后是jquery.validate.unobtrusive.js
  7. 在我的剃刀视图中,我使用
  8. @Html.TextAreaFor(model => model.Results) @Html.ValidationMessageFor(model => model.Results)

    1. HTML中存在不显眼的验证属性。
    2. 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存在问题。我能忘记或错过什么?

3 个答案:

答案 0 :(得分:0)

如果你想检查视图中的控件是否有效,通过DataAnnotation意味着在模型中写入属性时[必需],然后使用HTML.Helper

&#34; @Html.TextAreaFor(model => model.Property) @Html.ValidationMessageFor(model => model.Property)&#34;

这为您执行验证

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

&#34; <textarea>...</textarea>&#34;

答案 1 :(得分:0)

使用以下代码并尝试

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

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

答案 2 :(得分:0)

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