我通過郵件向用戶提供鏈接。當(dāng)他們點(diǎn)擊鏈接頁面打開并點(diǎn)擊提交按鈕時(shí),控制器發(fā)布方法運(yùn)行。saveRecords(){ -- business logic -- code validation for checking duplicates -- saving records}一切都運(yùn)行良好。但是突然發(fā)現(xiàn)正在輸入重復(fù)的記錄。Code邏輯沒有問題。跟蹤后發(fā)現(xiàn)瀏覽器是Mozilla時(shí)會(huì)發(fā)生這種情況。場景是用戶單擊郵件鏈接兩次,因此會(huì)打開 2 個(gè)選項(xiàng)卡,如果他點(diǎn)擊每個(gè)選項(xiàng)卡上的提交按鈕,則會(huì)插入重復(fù)項(xiàng)。注意 - 如果我們點(diǎn)擊提交的同一頁面正確驗(yàn)證。當(dāng)打開 2 個(gè)選項(xiàng)卡并在兩個(gè)選項(xiàng)卡中單擊提交按鈕且瀏覽器為 Firefox 時(shí),會(huì)出現(xiàn)問題。你能給我建議一個(gè)解決方案嗎?這是代碼的摘要:-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貢獻(xiàn)1834條經(jīng)驗(yàn) 獲得超8個(gè)贊
為什么不在方法周圍引入一個(gè)鎖(如果您無法弄清楚 Mozilla 發(fā)送兩個(gè) POST 調(diào)用的原因)并將代碼包裝在那里:
static object _lock = new object();
saveRecords()
{
lock(_lock)
{
-- business logic
-- code validation for checking duplicates
-- saving records
}
}
編輯 1 [使用工作行阻止集合]:
這不是最好的解決方案,但它會(huì)為您完成。如果您想以更好\更優(yōu)化的方式進(jìn)行,也許可以考慮使用 Monitor。
- 1 回答
- 0 關(guān)注
- 204 瀏覽
添加回答
舉報(bào)
0/150
提交
取消