为了账号安全,请及时绑定邮箱和手机立即绑定

控制器发布 - 重复记录 - Mozilla Firefox

控制器发布 - 重复记录 - Mozilla Firefox

C#
浮云间 2021-11-21 16:04:17
我通过邮件向用户提供链接。当他们点击链接页面打开并点击提交按钮时,控制器发布方法运行。saveRecords(){  -- business logic  -- code validation for checking duplicates  -- saving records}一切都运行良好。但是突然发现正在输入重复的记录。Code逻辑没有问题。跟踪后发现浏览器是Mozilla时会发生这种情况。场景是用户单击邮件链接两次,因此会打开 2 个选项卡,如果他点击每个选项卡上的提交按钮,则会插入重复项。注意 - 如果我们点击提交的同一页面正确验证。当打开 2 个选项卡并在两个选项卡中单击提交按钮且浏览器为 Firefox 时,会出现问题。你能给我建议一个解决方案吗?这是代码的摘要:-var obj = ctx.tblDuty.FirstOrDefault(m => m.Id == recordId);if (obj.EntryStatus == Status.Approved)    msg = "Duty already Approved.!";else if (obj.EntryStatus == Status.Rejected)    msg = "Duty already Rejected.!";var data = service.saveDuty(model, userRole);
查看完整描述

1 回答

?
MMMHUHU

TA贡献1834条经验 获得超8个赞

为什么不在方法周围引入一个锁(如果您无法弄清楚 Mozilla 发送两个 POST 调用的原因)并将代码包装在那里:


static object _lock = new object();

saveRecords()

{

    lock(_lock)

    {

        -- business logic

        -- code validation for checking duplicates

        -- saving records

    }

}

编辑 1 [使用工作行阻止集合]:

//img1.sycdn.imooc.com//6199fda4000102bc16320730.jpg

这不是最好的解决方案,但它会为您完成。如果您想以更好\更优化的方式进行,也许可以考虑使用 Monitor。


查看完整回答
反对 回复 2021-11-21
  • 1 回答
  • 0 关注
  • 174 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信