无法在我的ASP.NET Core MVC6项目中使用jquery.validation

时间:2016-04-14 07:52:35

标签: javascript jquery

我以为我会从post开始,这给了我实际答案。它在JSfiddle中工作,就像在上一篇文章中那样,但是我不能让它在项目中工作。我认为代码是正确的,它只是没有验证提交时的文本框。

这是页面的标记:

<form action="/CompanyDetails/Edit" method="post">
  <div class="form-horizontal">
    <h4>CompanyDetailsViewModel</h4>
    <hr />
    <div class="text-danger validation-summary-errors">
      <ul>
        <li style="display:none"></li>
      </ul>
    </div>
    <input type="hidden" data-val="true" data-val-required="The CompanyDetailsId field is required." id="CompanyDetailsId" name="CompanyDetailsId" value="1" />
    <div class="form-group">
      <label class="col-md-2 control-label" for="ABN">ABN:</label>
      <div class="col-md-10">
        <input type="text" name="ABN" id="ABN" class="form-control" />
        <span class="text-danger field-validation-error" data-valmsg-for="ABN" data-valmsg-replace="true" />
      </div>
    </div>

表单按钮:

<div class="form-group">
  <div class="col-md-offset-2 col-md-10">
    <input type="submit" value="Save" class="btn btn-default" />
  </div>
</div>

表单呈现但是当我单击“保存”而不是显示错误时,它只会返回到控制器,但ModelState为false。

我已经通过Firefox在实际验证脚本上设置了断点,但它甚至没有触发。

为什么验证脚本在使用JSFiddle 时在asp.net页面中不起作用?

1 个答案:

答案 0 :(得分:0)

我把头撞到墙上几个小时后就把它弄出来了。事实证明,验证是在Asp.net核心中根据您在视图使用的模型中设置的内容自动完成的。因此,如果您有[Requred]这样的数据注释,那么这将作为taghelper转换的一部分添加到标记中。

所以我真正想要的是“添加”另一条规则,而不是验证我拥有的规则。实际发生的事情是,ABN已经有了[必需]规则,因此我的自定义规则没有发生任何需要添加的规则。一旦我积极添加新规则,那么一切都开始起作用了。我决定添加另一个自定义规则来检查字符串的长度,以查看规则是否是顺序的。也就是说,一旦找到“false”,该标识符的验证就会停止。在这种情况下,验证ABN到澳大利亚税务局算法的最后一条规则也检查了长度,但如果数字位数不符合,则永远不会到达那里。

顺便提一下,在验证脚本之后,脚本已被放置在@section脚本{}中,因此它会在所有内容之后呈现...

顺便说一句,如果我有任何这样的错误,我仍然只是在学习中而感到高兴。

无论如何这里是代码:

    <script>
    $(function () {

        // Your custom validation method
        jQuery.validator.addMethod('abnValidate', function abnValidate(value, element) {
            if (value.length != 11 || isNaN(parseInt(value)))
                return false;
            var weighting = [10, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19];
            var tally = (parseInt(value[0]) - 1) * weighting[0];
            for (var i = 1; i < value.length; i++) {
                tally += (parseInt(value[i]) * weighting[i]);
            }
            return (tally % 89) == 0;
        });

        jQuery.validator.addMethod('exactlength', function (value, element) {
            if (value.length != 11 || isNaN(parseInt(value)))
                return false;
            return true;
        });

        $("#ABN").rules("add", {
            required: true,
            exactlength: true,
            abnValidate: true,
            messages: {
                required: "Required input",
                exactlength: "ABN has to be 11 digits long.",
                abnValidate: "The ABN does not conform to the ATO's algorithm"
            } 
        });
    });
</script>