我正在 Asp.net MVC 中渲染一个带有提交按钮的表单。成功将记录添加到数据库后,页面将重定向。以下是代码:-
[HttpPost]
public ActionResult Create(BrandPicView brandPic)
{
if (ModelState.IsValid)
{
if (!String.IsNullOrEmpty(brandPic.Picture.PictureUrl))
{
Picture picture = new Picture();
picture.PictureUrl = brandPic.Picture.PictureUrl;
db.Pictures.Add(picture);
brandPic.Brand.PictureId = picture.Id;
}
db.Brands.Add(brandPic.Brand);
db.SaveChanges();
return RedirectToAction("Index");
}
return View();
}
但是,在测试时,我发现如果一次又一次单击表单,则会提交多个条目并将其保存到数据库中。
我如何确保如果表单已提交到服务器一次,则不会提交重复项。
我不认为这与评论中引用的答案完全重复,因为该链接是针对 spring MVC 的,而这个问题是针对 .NET MVC 的。
实际上,我不久前花了几个小时在这上面,并提出了以下内容。这个 javascript 与不显眼的 jquery 验证很好地挂钩,你可以将它应用到任何具有以下功能的表单:<input type="submit"
。请注意,它使用 jquery 1.7 的on
功能:
$(document).on('invalid-form.validate', 'form', function () {
var button = $(this).find(':submit');
setTimeout(function () {
button.removeAttr('disabled');
}, 1);
});
$(document).on('submit', 'form', function () {
var button = $(this).find(':submit');
setTimeout(function () {
button.attr('disabled', 'disabled');
}, 0);
});
需要设置超时。否则,即使客户端验证失败,您也可能会得到一个在单击后被禁用的按钮。我们将其保存在全局 javascript 文件中,以便它自动应用于我们的所有表单。
2020 年 11 月 16 日更新@seagull https://stackoverflow.com/users/1178572/seagull :
更换选择器input[type="submit"]
with :submit
所以它将与<button type="submit" />
as well
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)