【问题标题】:How to validate serialized forms in jQuery Ajax?如何在 jQuery Ajax 中验证序列化表单?
【发布时间】:2015-02-26 14:58:21
【问题描述】:

我已经创建了一个表单,我正在序列化它并将它发送到我的 MVC Action 方法............我的 jQuery Ajax 脚本看起来像这样............

$('#submit').click(function () {

    var jsonObj = $('#form').serialize();
    alert(jsonObj);

    $.ajax({
        type: "POST",
        url: '../Doctor/AddDoctor',
        data: JSON.stringify({ "doctor": jsonObj }),
        success: function (data) {
            alert(data.Message);    
        },
        error: function (jqXHR, textStatus, errorThrown) {
            alert("Error: " + errorThrown + " , Please try again");
        }
    });
    return false;



});

所以我需要先验证这个表单,然后再将它发送到 Action 方法.....我该怎么做?............ 我找到了一个代码,但我不确定我需要在哪里插入它...... 就是那个代码......

$('#myform').validate({ // initialize the plugin
    rules: {
        Name: {
            required: true,
            //email: true
        },
        Charges: {
            required: true,
            //minlength: 5
        },
        WardId: {
            required: true,
            //minlength: 5
        },
        PhoneNo: {
            required: true,
            //minlength: 5
        }
    }
});

谁能告诉我在哪里插入这个,以验证我的表单............这就是我的 MVC 表单的样子...... ........

@using (Html.BeginForm("AddDoctor", "Doctor", FormMethod.Post, new { @id = "form" }))
{
    @Html.AntiForgeryToken()

    <div class="form-horizontal">
        <h4></h4>
        <hr />
        @Html.ValidationSummary(true)

        <div class="form-group">
            @*@Html.LabelFor(model => model.UserId, new { @class = "col-sm-2 control-label" })*@
            <label class="col-sm-2 control-label"> User ID</label>
            <div class="col-md-10">
                @Html.TextBoxFor(model => model.UserId, new { @class = "form-control" })
                @Html.ValidationMessageFor(model => model.UserId)
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.Name, new { @class = "col-sm-2 control-label" })
            <div class="col-md-10">
                @Html.TextBoxFor(model => model.Name, new { @class = "form-control", @name = "Name" })
                @Html.ValidationMessageFor(model => model.Name)
            </div>
        </div>        

        <div class="form-group">
            @*@Html.LabelFor(model => model.DoctorSpecialityId, new { @class = "col-sm-2 control-label" })*@
            <label class="col-sm-2 control-label"> Doctor Speciality ID</label>
            <div class="col-md-10">
                @Html.TextBoxFor(model => model.DoctorSpecialityId, new { @class = "form-control" })
                @Html.ValidationMessageFor(model => model.DoctorSpecialityId)
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.Charges, new { @class = "col-sm-2 control-label" })
            <div class="col-md-10">
                @Html.TextBoxFor(model => model.Charges, new { @class = "form-control", @name = "Charges" })
                @Html.ValidationMessageFor(model => model.Charges)
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.WardId, new { @class = "col-sm-2 control-label" })
            <div class="col-md-10">
                @Html.TextBoxFor(model => model.WardId, new { @class = "form-control", @name = "WardId" })
                @Html.ValidationMessageFor(model => model.WardId)
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.PhoneNo, new { @class = "col-sm-2 control-label" })
            <div class="col-md-10">
                @Html.TextBoxFor(model => model.PhoneNo, new { @class = "form-control", @name = "PhoneNo" })
                @Html.ValidationMessageFor(model => model.PhoneNo)
            </div>
        </div>        

        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="button" value="Create" class="btn btn-primary" id="submit" />
            </div>
        </div>

【问题讨论】:

    标签: javascript jquery ajax asp.net-mvc jquery-ui


    【解决方案1】:

    您应该在发送 Ajax 请求之前验证表单:

    $(document).ready(function() { 
        $('#form').validate({ // initialize the plugin
            rules: {
                // all the rules
            }
        });
    
        $('#submit').click(function () {
            var $form = $('#form');
    
            if ($form.valid()) {
    
                var jsonObj = $form.serialize();
                alert(jsonObj);
    
                $.ajax({
                    type: "POST",
                    url: '../Doctor/AddDoctor',
                    data: JSON.stringify({ "doctor": jsonObj }),
                    success: function (data) {
                        alert(data.Message);    
                    },
                    error: function (jqXHR, textStatus, errorThrown) {
                         alert("Error: " + errorThrown + " , Please try again");
                    }
               });
           } else {
                alert('form is not valid!');
           }
           return false;
    
        });
    }
    

    【讨论】:

    • 对不起......它没有工作......现在页面没有做任何事情......它被冻结了......
    • 您也应该显示 HTML 代码。在您的代码中,您的表单 #myform 和 #form 有不同的 id。
    • 我将 id 名称更正为 #form 它仍然不起作用
    • 试着把所有的东西都放在 $(document).ready(function() { ALL JAVASCRIPT CODE HERE }
    • 页面加载了吗?你看到表格了吗?检查控制台中的错误
    【解决方案2】:

    尝试将您的提交点击处理程序更改为:

    $('#submit').click(function () {
        e.preventDefault();
    
        var doctorForm = $('#form');
        $.validator.unobtrusive.parse(doctorForm);
        doctorForm.validate();
    
        if (doctorForm.valid()) {
            $.ajax({
                type: "POST",
                url: '@Url.Content("~/Doctor/AddDoctor")',
                data: JSON.stringify({ "doctor": jsonObj }),
                success: function (data) {
                    alert(data.Message);    
                },
                error: function (jqXHR, textStatus, errorThrown) {
                    alert("Error: " + errorThrown + " , Please try again");
                }
            });
            return false;
        }
    });
    

    【讨论】:

    • 仍然无法正常工作页面被冻结......什么也没做......也没有错误
    • 我刚刚编辑了我的代码以更改 URL,据我所知,您不能在 JQuery 中使用相对路径,但使用 @Url.Content(relativePath) 将允许服务器呈现路径在运行时,这实际上是相对的。
    • 是的,我的控制台中有一个错误......它说'Uncaught TypeError:undefined is not a function'............它指向这个...... ..我把我的验证码放在哪里.... $('#form').validate({
    • 您的布局中是否有指向不显眼的验证库的链接参考?
    • 抱歉,不显眼的验证库是什么意思?
    猜你喜欢
    • 2011-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-04
    • 1970-01-01
    • 2019-04-27
    • 1970-01-01
    相关资源
    最近更新 更多