今天,我有一个树形视图供用户编辑,但我想锁定动作以防止用户在B用户已删除A用户的编辑节点后提交已编辑的节点;
我已经搜索了关于这种情况的方法,我更喜欢在动作过滤器中执行此操作,如果一个用户进入此页面然后设置一个标记进行记录,并在用户离开此页面后释放标记; < / p>
但我需要帮助: (1)当用户通过动作过滤器进入页面时如何设置标志, (2)如何在用户离开页面时捕获正确的时间并通知操作过滤器通过javascript或razor helper删除标记, (3)在锁定期间,向页面上的其他用户抛出什么例外?
答案 0 :(得分:0)
如果我是你,我会做这样的事情(我正在测试我的技能,以添加有意义的评论,而不是描述代码:))
public EditTree()
{
// Get current logged in user, check if user has permission
lock(_treeLock)
{
// Check if tree can be edited at this moment
if(!isTreeEditable())
{
throw new InvalidOperationException();
//Or
return Json("ERROR"); // Display an error on the client as you wish.
}
else
{
// Set the flag in DB so then no one else can edit
// Return the tree data for edition
}
}
}
如果您想允许用户编辑树或实时查看更改,那么可能涉及处理很多情况(连接断开,数据库故障等)。我建议您仔细检查您的要求和设计,以简化。
要实时同步所有用户的树,您需要在服务器和所有客户端之间使用持久连接(使用SignalR)。