我在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();
}但是,在测试过程中,我发现如果反复单击表单,就会提交多个条目并将其保存到数据库中。
如果表单已提交给服务器一次,那么如何确保不会提交重复的表单。
发布于 2012-01-06 22:07:39
我不认为这是评论中提到的答案的重复,因为这个链接是针对spring MVC的,而这个问题是针对.NET MVC的。
实际上,我之前花了几个小时在这上面,并想出了以下几点。这个javascript与不显眼的jquery验证很好地结合在一起,您可以将它应用于任何具有<input type="submit"的表单。注意,它使用了jQuery1.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);
});setTimeouts是必需的。否则,您最终可能会得到一个按钮,即使在客户端验证失败时,该按钮在单击后也会被禁用。我们把它放在一个全局javascript文件中,这样它就会自动应用到我们所有的表单中。
更新2020年11月16日,由 提供
将选择器input[type="submit"]替换为:submit,因此它也可以与<button type="submit" />一起工作
发布于 2018-07-19 22:47:25
使用mvc客户端验证的mvc应用程序的解决方案应该是:
$('form').submit(function () {
if ($(this).valid()) {
$(':submit', this).attr('disabled', 'disabled');
}
});发布于 2012-01-06 20:45:55
单击提交时禁用该按钮。这可以使用JQuery/Java Script来完成。
关于如何做到这一点,请查看this example。
https://stackoverflow.com/questions/8757963
复制相似问题