在表单提交之前检查重复项的最佳方法

时间:2014-03-07 16:43:32

标签: jquery asp.net-mvc

我的表单提交按钮上有一些jquery,它会对重复提交进行数据库检查,如果找到任何内容则会弹出一个窗口,然后它应该返回主页,或者提交表单,具体取决于在用户输入上。

如果可能的话,我想避免使用jquery提交,所以我想知道是否有办法进行ajax调用,然后将提交传递回MVC以照常提交模型?或者我是否因为使用jquery中断提交过程而坚持使用jquery提交?

    $("#submit").on("click", function(e) {
        e.preventDefault();
        var first = $("#FirstName").val();
        var last = $("#LastName").val();
        $.ajax({
            url: '@Url.Action("CheckDuplicatePerson", "Validation")/?FirstName=' + first + '&LastName=' + last,
            type: 'GET',
            success: function(data) {
                if (data == true)
                {
                    var template = kendo.template($("#submit-confirm").html());
                        var kendoWindow = $("<div />").kendoWindow({
                            title: "Confirm Save",
                            resizable: false,
                            modal: true,
                            height: 200,
                            width: 200,
                            content: {
                                template: template //$("submit-confirm").html()
                            }
                        });

                        kendoWindow.data("kendoWindow").center().open();

                        kendoWindow
                            .find(".submit-confirm, .submit-cancel")
                            .click(function() {
Would like to pass back         if ($(this).hasClass("submit-confirm")) {
 to MVC submission here ->          $("#person-form").submit();
                                }
                                else
                                {
                                    kendoWindow.data("kendoWindow").close();
                                }
                         }); 
                }
                else
                {
                    $("#person-form").submit();
                }
            }
        });
    });

1 个答案:

答案 0 :(得分:1)

  

如果可能的话,我想避免使用jquery提交,所以我是   想知道是否有办法进行ajax调用,然后通过   提交回MVC以照常提交模型?

您可以通过实施远程验证来实现此目的。 ASP.NET MVC提供了一种可以进行远程服务器调用的机制 为了验证表单字段而不将整个表单发布到服务器。 当您有一个无法在客户端上验证的字段并因此在提交表单时可能无法验证时,这非常有用。下面是一个示例:

首先,将Remote属性添加到模型的字段中:

public class User
{
    [Required]
    public string FirstName { get; set; }

    [Required]
    [Remote("IsTakenName", "Home", AdditionalFields = "FirstName")]
    public string Lastname { get; set; }
}

然后在Controller中创建服务器端验证功能:

public JsonResult IsTakenName([Bind(Prefix = "FirstName")] string firstName, [Bind(Prefix = "LastName")] string lastName) 
{
     if (string.IsNullOrEmpty(firstName))
     {
         return Json("The first name is required.", JsonRequestBehavior.AllowGet);
     }
     if (string.IsNullOrEmpty(lastName))
     {
         return Json("The last name is required.", JsonRequestBehavior.AllowGet);
     }
     if (!string.IsNullOrEmpty(lastName) && !string.IsNullOrEmpty(firstName))
     {
         isTakenName = // verfiy the user name here return to 
         if (isTakenName)
            return Json("The user name is taken.", JsonRequestBehavior.AllowGet);
     }
     return Json(true, JsonRequestBehavior.AllowGet);
}

最后,使用ValidationMessageFor验证视图中的属性:

<div>
    @Html.LabelFor(model => model.FirstName)
    <div>
        @Html.EditorFor(model => model.FirstName)
        @Html.ValidationMessageFor(model => model.FirstName)
    </div>
</div>

<div>
    @Html.LabelFor(model => model.Lastname)
    <div>
        @Html.EditorFor(model => model.Lastname)
        @Html.ValidationMessageFor(model => model.Lastname)
    </div>
</div>