首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通过单击两次提交来避免在Asp.net MVC中重复提交表单。

通过单击两次提交来避免在Asp.net MVC中重复提交表单。
EN

Stack Overflow用户
提问于 2012-01-06 20:43:51
回答 7查看 35.3K关注 0票数 31

我在Asp.net MVC中呈现一个带有提交按钮的表单。成功将记录添加到数据库后,页面将重定向。以下是代码:

代码语言:javascript
运行
复制
[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();
}

但是,在测试过程中,我发现如果反复单击表单,就会提交多个条目并将其保存到数据库中。

如果表单已提交给服务器一次,那么如何确保不会提交重复的表单。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2012-01-06 22:07:39

我不认为这是评论中提到的答案的重复,因为这个链接是针对spring MVC的,而这个问题是针对.NET MVC的。

实际上,我之前花了几个小时在这上面,并想出了以下几点。这个javascript与不显眼的jquery验证很好地结合在一起,您可以将它应用于任何具有<input type="submit"的表单。注意,它使用了jQuery1.7的on函数:

代码语言:javascript
运行
复制
$(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" />一起工作

票数 83
EN

Stack Overflow用户

发布于 2018-07-19 22:47:25

使用mvc客户端验证的mvc应用程序的解决方案应该是:

代码语言:javascript
运行
复制
$('form').submit(function () {
    if ($(this).valid()) {
        $(':submit', this).attr('disabled', 'disabled');
    }
});
票数 9
EN

Stack Overflow用户

发布于 2012-01-06 20:45:55

单击提交时禁用该按钮。这可以使用JQuery/Java Script来完成。

关于如何做到这一点,请查看this example

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8757963

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档