Jquery 提交表单前检查副本的最佳方法
我的表单提交按钮上有一个jquery,它可以检查数据库是否重复提交,如果发现任何内容,会弹出一个窗口,然后它应该返回主页,或者根据用户输入提交表单 如果可能的话,我希望避免使用jquery提交,因此我想知道是否有一种方法可以执行ajax调用,然后将提交内容传递回MVC,以便像往常一样提交模型?还是因为我使用jquery中断了提交过程,所以我一直坚持使用jquery提交Jquery 提交表单前检查副本的最佳方法,jquery,asp.net-mvc,Jquery,Asp.net Mvc,我的表单提交按钮上有一个jquery,它可以检查数据库是否重复提交,如果发现任何内容,会弹出一个窗口,然后它应该返回主页,或者根据用户输入提交表单 如果可能的话,我希望避免使用jquery提交,因此我想知道是否有一种方法可以执行ajax调用,然后将提交内容传递回MVC,以便像往常一样提交模型?还是因为我使用jquery中断了提交过程,所以我一直坚持使用jquery提交 $("#submit").on("click", function(e) { e.preventDefa
$("#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调用以检查重复项。通过这种方式,用户已被通知存在同名的人,我让他们继续填写表单或不填写表单。谢谢林。你的回答真的帮助了我。