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

我通过邮件向用户提供链接。当他们点击链接页面打开并点击提交按钮时,控制器发布方法运行。


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);


浮云间
浏览 175回答 1
1回答

MMMHUHU

为什么不在方法周围引入一个锁(如果您无法弄清楚 Mozilla 发送两个 POST 调用的原因)并将代码包装在那里:static object _lock = new object();saveRecords(){    lock(_lock)    {        -- business logic        -- code validation for checking duplicates        -- saving records    }}编辑 1 [使用工作行阻止集合]:这不是最好的解决方案,但它会为您完成。如果您想以更好\更优化的方式进行,也许可以考虑使用 Monitor。
打开App,查看更多内容
随时随地看视频慕课网APP