Jquery 提交表单前检查副本的最佳方法

Jquery 提交表单前检查副本的最佳方法,jquery,asp.net-mvc,Jquery,Asp.net Mvc,我的表单提交按钮上有一个jquery,它可以检查数据库是否重复提交,如果发现任何内容,会弹出一个窗口,然后它应该返回主页,或者根据用户输入提交表单 如果可能的话,我希望避免使用jquery提交,因此我想知道是否有一种方法可以执行ajax调用,然后将提交内容传递回MVC,以便像往常一样提交模型?还是因为我使用jquery中断了提交过程,所以我一直坚持使用jquery提交 $("#submit").on("click", function(e) { e.preventDefa

我的表单提交按钮上有一个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();
                }
            }
        });
    });
$(“#提交”)。在(“单击”上,函数(e){
e、 预防默认值();
var first=$(“#FirstName”).val();
var last=$(“#LastName”).val();
$.ajax({
url:'@url.Action(“CheckDuplicatePerson”,“Validation”)/?FirstName='+first+'&LastName='+last,
键入:“GET”,
成功:功能(数据){
如果(数据==true)
{
var template=kendo.template($(“#提交确认”).html();
var kendoWindow=$(“”)。kendoWindow({
标题:“确认保存”,
可调整大小:false,
莫代尔:是的,
身高:200,
宽度:200,
内容:{
模板:template/$(“提交确认”).html()
}
});
kendoWindow.data(“kendoWindow”).center().open();
肯多文多
.find(“.submit confirm,.submit cancel”)
。单击(函数(){
如果($(this).hasClass(“提交确认”),则希望传回{
此处提交MVC->$(“#个人表格”).submit();
}
其他的
{
kendoWindow.data(“kendoWindow”).close();
}
}); 
}
其他的
{
$(“#个人表格”).submit();
}
}
});
});
如果可能的话,我希望避免使用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; }
}
然后在控制器中创建服务器端验证功能:

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>

@LabelFor(model=>model.FirstName)
@EditorFor(model=>model.FirstName)
@Html.ValidationMessageFor(model=>model.FirstName)
@LabelFor(model=>model.Lastname)
@EditorFor(model=>model.Lastname)
@Html.ValidationMessageFor(model=>model.Lastname)

您应该直接在服务器中实现这种验证。传递所有内容并让您的业务层负责此类验证。@Fals-True,但是如果客户端打算保存第二条记录,如果验证在服务器上完成,它不需要在客户端上重新加载视图,这将删除所有输入吗?我之前尝试过remote,但是我想要一个完整的弹出窗口,而不是红色的内联文本。我已经解决了这个问题,将整个过程从单击submit按钮改为单击last name字段,这将触发ajax调用以检查重复项。通过这种方式,用户已被通知存在同名的人,我让他们继续填写表单或不填写表单。谢谢林。你的回答真的帮助了我。