我通过邮件向用户提供链接。当他们点击链接页面打开并点击提交按钮时,控制器发布方法运行。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 [使用工作行阻止集合]:
这不是最好的解决方案,但它会为您完成。如果您想以更好\更优化的方式进行,也许可以考虑使用 Monitor。
- 1 回答
- 0 关注
- 174 浏览
添加回答
举报
0/150
提交
取消