【问题标题】:jquery validation plugin with partial view ajax loaded加载了部分视图 ajax 的 jquery 验证插件
【发布时间】:2015-03-19 05:54:05
【问题描述】:

我正在使用Jquery Validation 插件来验证我的远程加载的局部视图表单模态。

var formDataSource = $('#frmDataSource').validate({
    rules: {
        provider: { required: true },
        stype: { required: true },
        url: { required: true },
        uname: { required: true, digits: true },
        pword: { required: true }
    },
    messages: {
        provider: { required: 'Please enter provider name' },
        stype: { required: 'Please select type' },
        url: { required: 'Please enter url' },
        uname: { required: 'Please enter user name' },
        pword: { required: 'Please enter password' }
    },
    errorPlacement: function(error, element) {
        error.insertAfter(element.parent());
    },
    submitHandler: function (form) {
         //submit form
    }
});

我的部分观点

<div class="modal-body no-padding">
    @using (Html.BeginForm("AddProvider", "DataSource", FormMethod.Post, new { id = "frmDataSource", @class = "smart-form" }))
    {
        <fieldset>
            <div class="row">
                <section class="col col-5">
                    <label class="select">
                        <i class="icon-append fa fa-question-circle"></i>
                        @Html.DropDownList("providers", ViewBag.ProviderSelectList as List<SelectListItem>, new { name = "provider", placeholder = "Provider Name" })
                        <i></i>
                    </label>
                </section>
                <section class="col col-3 col-lg-offset-3">
                    <label class="toggle">
                        @Html.CheckBoxFor(d => d.IsActive, new { name = "chkbxactive" })
                        <i data-swchon-text="ON" data-swchoff-text="OFF"></i>Active
                    </label>
                </section>

            </div>
            <div class="row">
                <section class="col col-5">
                    <label class="select">
                        <select name="stype" class="input-sm" required="">
                            <option value="1">FTP</option>
                        </select> <i></i>
                    </label>
                </section>
                <section class="col col-5">
                    <label class="input">
                        <i class="icon-append fa fa-question-circle"></i>
                        @Html.TextBoxFor(d => d.Address, new { name = "url", placeholder = "URI" })
                        <b class="tooltip tooltip-bottom-right"><i class="fa fa-warning txt-color-teal"></i> URI</b>
                    </label>
                </section>
            </div>
            <div class="row">
                <section class="col col-5">
                    <label class="input">
                        <i class="icon-append fa fa-question-circle"></i>
                        @Html.TextBoxFor(d => d.UserName, new { name = "uname", placeholder = "Username" })
                        <b class="tooltip tooltip-bottom-right"><i class="fa fa-warning txt-color-teal"></i> Username</b>
                    </label>
                </section>
                <section class="col col-5">
                    <label class="input">
                        <i class="icon-append fa fa-question-circle"></i>
                        @Html.TextBoxFor(d => d.Password, new { name = "pword", placeholder = "Password", type = "password" })
                        <b class="tooltip tooltip-bottom-right"> <i class="fa fa-warning txt-color-teal"></i> Password</b>
                    </label>
                </section>
            </div>
        </fieldset>
        <footer>
            <button type="button" class="btn btn-default" data-dismiss="modal">
                Cancel
            </button>
            <button id="btn-frmsubmit" type="submit" class="btn btn-info">
                Save
            </button>
        </footer>
    }
</div>

上面的代码没有验证和提交然后我尝试了这个

$(document).on('submit', '#frmDataSource', function(e) {
    e.preventDefault();
    var validator = $("#frmDataSource").validate({
        rules: {
            provider: { required: true },
            stype: { required: true },
            url: { required: true },
            uname: { required: true, digits: true },
            pword: { required: true }
        },
        messages: {
            provider: { required: 'Please enter provider name' },
            stype: { required: 'Please select type' },
            url: { required: 'Please enter url' },
            uname: { required: 'Please enter user name' },
            pword: { required: 'Please enter password' }
        },
        errorPlacement: function(error, element) {
            error.insertAfter(element.parent());
        }
    });

})

表单仍然没有提交我的代码有什么问题? 远程加载时如何提交表单?

编辑

根据要求Sparky

  • 只是验证不起作用,因为验证规则不起作用

  • 申请。没有控制台错误,因为它不是错误。它不是 应用验证规则。

问候

【问题讨论】:

  • “不提交”是什么意思?验证是否有效?您是否看到任何控制台错误?页面是否刷新但数据未发送?还有什么?另外,只向我们展示 rendered 表单的 HTML 标记,而不是视图的 ASP 代码。
  • 您永远不会将.validate() 方法放在submit 处理程序中。 .validate() 方法仅用于initializing插件并进入DOM 就绪事件处理程序,在该处理程序中被调用一次。此外,如果您的 ASP 项目正在使用 unobtrusive-validation 插件,那么您必须将其删除,因为它不允许您直接使用 jQuery Validate 插件的 .validate() 方法。
  • 嗨 sparky 我想出了替代解决方案。我将在下面发布答案。

标签: jquery asp.net-mvc jquery-validate partial-views


【解决方案1】:

我已经解决了这个问题。我会发布以供参考。

在使用show.bs.modal 事件显示模式窗口之前,我已经分配了验证规则。 (不在索引页面上加载)这里是代码示例。

$('#btn-addDataSource').on('click', function() {
    $('#register-modal').load('@Url.Action("AddProvider", "DataSource")', function() {
        $(this).one('show.bs.modal', function() {
            var validator = $("#frmDataSource").validate({
                rules: {
                    provider: { required: true },
                    providerName: { required: true },
                    stype: { required: true },
                    Address: { required: true },
                    UserName: { required: true },
                    Password: { required: true }
                },
                messages: {
                    provider: { required: 'Please enter provider name' },
                    providerName: { required: 'Please enter provider name' },
                    stype: { required: 'Please select type' },
                    Address: { required: 'Please enter url' },
                    UserName: { required: 'Please enter user name' },
                    Password: { required: 'Please enter password' }
                },
                errorPlacement: function (error, element) {
                    error.insertAfter(element.parent());
                }
            });
        }).modal({
            backdrop: 'static',
            keyboard: true
        });
    });
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-21
    • 2017-06-14
    相关资源
    最近更新 更多