管制员职位-重复记录-Mozilla Firefox

时间:2018-08-09 11:48:37

标签: c# asp.net-mvc entity-framework

我正在通过邮件向用户提供链接。当他们单击链接“页面打开”并单击“提交”按钮时,将运行Controller Post方法。

saveRecords()
{
  -- business logic
  -- code validation for checking duplicates
  -- saving records
}

一切正常。但是突然发现正在输入重复的记录。代码逻辑没有问题。

在跟踪之后,发现它是在浏览器为Mozilla时发生的。场景是用户两次单击“邮件”链接,因此打开了两个选项卡;如果他在每个选项卡上都单击了“提交”按钮,则将插入重复项。

注意-如果我们点击了同一页面,则提交将正确验证。 当打开两个选项卡并在两个选项卡中单击“提交”按钮并且浏览器是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 个答案:

答案 0 :(得分:1)

为什么不在该方法周围引入锁(如果您无法弄清Mozilla为什么发送两次POST调用)并将代码包装在其中:

static object _lock = new object();
saveRecords()
{
    lock(_lock)
    {
        -- business logic
        -- code validation for checking duplicates
        -- saving records
    }
}

编辑1 [使用工作行阻止集合]: enter image description here

这不是最好的解决方案,但是它将为您完成它。如果您想以更好/更优化的方式进行操作,请考虑使用Monitor。