c#mvc一次只能编辑树视图的一个用户

时间:2015-02-12 10:12:40

标签: javascript c# asp.net-mvc asp.net-mvc-4 razor

今天,我有一个树形视图供用户编辑,但我想锁定动作以防止用户在B用户已删除A用户的编辑节点后提交已编辑的节点;

我已经搜索了关于这种情况的方法,我更喜欢在动作过滤器中执行此操作,如果一个用户进入此页面然后设置一个标记进行记录,并在用户离开此页面后释放标记; < / p>

但我需要帮助: (1)当用户通过动作过滤器进入页面时如何设置标志, (2)如何在用户离开页面时捕获正确的时间并通知操作过滤器通过javascript或razor helper删除标记, (3)在锁定期间,向页面上的其他用户抛出什么例外?

1 个答案:

答案 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)。