【问题标题】:jQuery Validation in ASP.NET and AngularJSASP.NET 和 AngularJS 中的 jQuery 验证
【发布时间】:2016-10-18 16:19:32
【问题描述】:

我想在提交到 AJAX 之前对表单执行 jQuery 验证。这里需要注意的一点是,我的应用程序位于 ASP.NET Web 窗体 中并实现了母版页,并且我的母版页中已经有一个带有 runat="server" 的表单。

在我的内容页面中,表单是这样的

<form class="form-horizontal form-bordered" id="PageForm">
                    <div class="form-group">
                        <label for="DesignationName" class="col-lg-4 col-sm-2 control-label">Designation Name</label>
                        <div class="col-lg-8">
                            <input id="DesignationName" ng-model="newDesignation.DesignationName" type = "text" class="form-control"  placeholder="" >
                        </div>
                    </div>


                    <div class="form-group">
                        <label class="col-lg-4 col-sm-2 control-label">Designation Short Name</label>
                        <div class="col-lg-8">
                            <input id="DesignationShortName" ng-model="newDesignation.DesignationShortName" type = "text" class="form-control"  placeholder="" >
                        </div>
                    </div>


                    <div class="form-group">
                        <label class="col-lg-4 col-sm-2 control-label">Designation Order</label>
                        <div class="col-lg-8">
                            <input id="DesignationOrder" ng-model="newDesignation.DesignationOrder" type = "text" class="form-control"  placeholder="" >
                        </div>
                    </div>


                        <div class="form-group">
                                    <label class="col-sm-4 control-label">Administrative Department</label>


                                    <div class="col-sm-8">

                                        <select class="form-control" id="DivisionId" data-ng-options="d.DivisionId as d.DivisionName for d in divisions"  data-ng-model="newDesignation.DivisionId">
                                            <option value="">Please select</option>
                                        </select>
                                        <span class="mandatoryFieldMarker">*</span>

                                    </div>
                       </div>



                    <div class="btn-list" style="text-align: right; margin-right: 1.5%">

                            <button id="SaveBtn" type="submit" value="Save" class="btn btn-primary" data-ng-clickkk="save()"><i class="fa fa-check"></i> Save</button>
                            <a class="btn btn-danger" data-ng-click="cancel()"><i class="fa fa-trash-o"></i> Cancel</a>

                    </div>
</form>

如您所见,我在这里使用了很多 AngularJS 指令,因为最终我想执行 AJAX 提交。

在我的 AngularJS 控制器中,我有这段代码

jQuery(document).ready(function() {


    jQuery("#SaveBtn").click(function (e) {

        e.preventDefault();

        alert(456);

        jQuery("#PageForm").validate({
            rules: {
                DesignationName: {
                    required: true,
                    minlength: 5,
                    maxlength: 200
                },
                DesignationShortName: {
                    minlength: 1,
                    maxlength: 50
                },
                DesignationOrder: {
                    required: true,
                    digits: true,
                    min: 1,
                    max: 1000000
                },
                DivisionId: {
                    required: true
                }
            },
            messages: {
                DesignationName: {
                    required: "Please specify designation name",
                    minlength: "Designation name must be between 5 and 200 characters",
                    maxlength: "Designation name must be between 5 and 200 characters"
                },
                DesignationShortName: {
                    minlength: "Designation short name must be between 1 and 50 characters",
                    maxlength: "Designation short name must be between 1 and 50 characters"
                },
                DesignationOrder: {
                    required: "Please specify designation order",
                    digits: true,
                    min: "Designation order must be betwen 1 and 1000000",
                    max: "Designation order must be betwen 1 and 1000000"
                },
                DivisionId: {
                    required: "Please select administrative division"
                }
            },
            submitHandler: function (form) {


                /////////////
            }
        });


    });



});

问题是,当我提交表单时,我收到警报 456,但没有触发 jQuery 验证,也没有保存数据(即提交处理程序也没有触发)

这是我第一次使用 jQuery 验证,所以我真的很困惑该怎么做。

【问题讨论】:

  • jQuery 和 Angular 是两个完全不同的 JavaScript 框架。当 Angular 有自己的验证插件时,为什么要在 Angular 中使用 jQuery Validate 插件?您是否禁用了 ASP 的内置非侵入式验证?

标签: jquery asp.net angularjs jquery-validate


【解决方案1】:

您的全部问题在于尝试使用 click 处理程序并阻止默认行为...

jQuery(document).ready(function() {

    jQuery("#SaveBtn").click(function (e) {

        e.preventDefault();

        alert(456);

        jQuery("#PageForm").validate({
            ....

jQuery Validate 插件会自动捕获任何type="submit" 按钮的点击事件,因此您只需初始化插件,其余的都是自动的...

jQuery(document).ready(function() {

    jQuery("#PageForm").validate({ 
        ...

编辑

此外,对于此插件,name 属性对于每个 input 都是必需的,.validate() 方法必须在 rulesmessages 对象中使用此 name

jQuery("#PageForm").validate({
    rules: {
        DesignationName: { // <- MUST be the NAME attribute
            ....

演示:jsfiddle.net/06q8sxa3/

【讨论】:

  • 如果我这样做,表单会自动回传到服务器
  • @Shuaib,那么还有其他问题。查看我的编辑...您必须在这些输入上具有 name 属性。
  • 我编辑了我的表单,保留名称属性和 id ...但结果是一样的
  • @Shuaib,那么您没有向我们展示一些问题。这是您的代码,它对我有用:jsfiddle.net/06q8sxa3
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多