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

2024-05-23

我正在 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(使用前将#替换为@)

通过单击两次提交来避免在 Asp.net MVC 中重复提交表单 的相关文章

  • Ninject:选择错误的构造函数

    我有一个带有 Ninject v2 2 1 4 的 ASP NET MVC 3 应用程序 一切都运行良好 然后突然我们开始看到 Ninject 尝试使用带有参数的构造函数而不是无参数构造函数来创建 DbContext 以下是绑定 kerne
  • 如何将值从控制器传递到asp.net中的视图?

    我正在开发一个应用程序 我需要将用户名的值从控制器传递到视图 我尝试了 ViewData 中给出的http msdn microsoft com en us library system web mvc viewdatadictionary
  • 影响浏览器是否提示保存凭据

    对于大多数具有用户名和密码对话框的网页 浏览器将提示用户是否要保存该表单的凭据 然而 对于此登录页面 http vdn volvoce com 事实并非如此 我找不到关于 IE 如何决定是否显示此对话框的任何好的数据 如何让 IE 显示该提
  • 防止 jQuery 中的双重表单提交

    我有一个用户用来输入有关发布信息的表单 完成后 他们单击 保存 进行更新 然而 在极少数情况下 15 000 条记录中的 10 条 用户双击保存按钮并导致双重表单提交 从而导致发布的项目重复 我尝试用它来防止它 input type sub
  • UIHint 不使用 EditorTemplate

    我有一个这样的模型 public class MyModel ScaffoldColumn false public int CharityId get set UIHint Charities public SelectList Char
  • asp.net mvc 3,主题(不同视图)

    我想向我的网站添加将使用完全不同视图的主题 我想在我的项目中看到它们 如下所示 Views Theme1 Views Theme2 而不是默认的 Views 当然 我需要一种简单的方法来在它们之间进行切换 所以问题是 如何让 ViewEng
  • 在浏览器中刷新页面而不重新提交表单

    我是一名 ASP NET 开发人员 我通常会发现自己正在浏览器中打开正在处理的网页 Chrome 是我选择的浏览器 但这个问题与任何浏览器都相关 我的工作流程通常是这样的 编写代码 在 Visual Studio 中重建项目 然后使用 Al
  • Ajax.BeginForm 可以重定向到新页面并传递路由值

    此链接显示如何重定向 Ajax BeginForm 但不显示如何将路由值传递到新视图 可以重定向到新页面的 Ajax BeginForm https stackoverflow com questions 9391201 ajax begi
  • 如何将 mvc-mini-profiler 与 Entity Framework 4.1 一起使用

    我尝试将 mvc mini profiler 与 MVC3 一起使用 但不断收到以下错误 无法确定 MvcMiniProfiler Data ProfiledDbConnection 类型连接的提供程序名称 下面是我用来尝试实例化上下文的代
  • MVC3 TextBoxFor 带有编码文本

    有没有办法将 TextBoxFor 助手与编码文本一起使用 例如 当使用 MVC3 With Razor 视图引擎的以下帮助程序时 Html TextBoxFor model gt model Description 并且对 model D
  • 每 4 个循环新表行

    如何在 Razor 视图中每 4 个循环创建一个新表行 这是为 4 之前的每个数字创建一个新行 然后停止创建新行 int i 0 foreach var item in ViewBag ProgramIdList if i 4 0 tr t
  • 通过删除空 GET 变量并简化变量名称来缩短 URL

    我正在开发一个网站 在提交后组成一个 URLGET form 表单值作为一组变量传递 其中必须至少定义一个变量才能在数据库上进行搜索 我想将网址缩短为删除空表单元素并使其更加用户友好简化变量名称 目前 URL 如下所示 只是带有更多变量 我
  • 颤振动态形式无法正常工作

    在我的应用程序中 我想创建一组动态表单 用户可以在其中添加更多项目 在这种动态形式中 它由两个文本字段 1 电话字段 2 电子邮件字段和一个下拉字段组成 但我尝试的任何事情都无法正常工作 我已经要求修复我的代码 但没有得到答复 堆栈溢出问题
  • RegisterGlobalFilters 的目的是什么?

    在 MVC3 中 我以这种方式启用了 CustomErrors
  • IsReusable 属性中的上下文切换

    是否可重用属性 下面是我的理解IsReusable财产 如果处理程序返回静态内容 将值设置为 true 是安全的 但如果线程返回动态内容 为了使其线程安全 IsReusable应设置为 false 在这种情况下 可能会发生上下文切换 这可能
  • 表单发布请求并存储收到的数据

    我有一个非常简单的表单 在提交时发出发布请求
  • 是否可以让 ASP.NET MVC 3 项目在 Mono 2.10 下运行?

    Mono 2 10 的发行说明建议支持 ASP NET MVC 3 0 和Razor http weblogs asp net scottgu archive 2010 07 02 introducing razor aspx using
  • 当集合提交回控制器时,未将对象引用设置为对象的实例。错误

    我正在更新多条记录 单击提交按钮后出现错误 这表明控制器收到 NULL 并在第 36 行报告以下错误 下面是我的控制器 视图和模型的代码 你调用的对象是空的 描述 执行当前 Web 请求期间发生未处理的异常 请检查堆栈跟踪 有关该错误及其起
  • 将 Base64 图像数据上传到 Amazon S3

    好吧 在这个phonegap 应用程序中 我从设备相机中的一个巨大图像文件开始 然后我降低分辨率并允许用户使用 javascript canvas 和一些非常酷的代码 称为 darkroomJS 来裁剪它 最后 darkroomJS 使用
  • 防止按下回车键时提交表单[重复]

    这个问题在这里已经有答案了 我们如何防止按下回车键时提交表单 实际上我有一个文本框 在该文本框中输入一个值并单击输入时 textbox2 将获得焦点 默认情况下 单击输入按钮后将提交表单 所以我无法得到输出 我在提交按钮的 onclick

随机推荐