【问题标题】:c# mvc only one user to edit tree view at one timec# mvc 一次只有一个用户可以编辑树视图
【发布时间】:2015-02-12 10:12:40
【问题描述】:

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

我已经搜索过这个场景的方法,我更喜欢在动作过滤器上做,如果一个用户进入这个页面然后设置一个标志来记录,当用户离开这个页面后,释放这个标志;

但我需要关于以下方面的帮助: (1)用户通过动作过滤器进入页面时如何设置标志, (2)如何捕捉用户离开页面的正确时机,并通过javascript或razor helper通知动作过滤器删除标签, (3)在锁定期间,向页面上的其他用户抛出什么异常?

【问题讨论】:

  • 您可能想使用 websockets(可能是 SignalR)来保持所有客户端之间的 UI 同步。
  • 感谢您提供此信息,SignalR 可能是我需要的,我会对此进行研究。

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


【解决方案1】:

如果我是你,我会做这样的事情(我正在测试我的技能以添加有意义的评论而不是描述代码:))

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

【讨论】:

  • 感谢分享,但是我已经锁定了文件,如果有多个操作进来,他们会依次执行;现在我想防止A用户看到B用户删除的节点的情况,对此有什么想法吗?
  • 所以你想允许多个用户同时编辑树,即一个用户在一个浏览器中修改,所有其他用户应该实时看到这个变化?
  • 是的,希望可以实现,按我的逻辑可以吗?还是有什么需要考虑的?
  • 嗯,是的,使这成为可能涉及处理很多情况(连接断开、数据库故障等)。为了简单起见,我建议您仔细检查您的要求和设计。要实时同步所有用户的树,您需要在服务器和所有客户端之间使用持久连接(使用 SignalR)。
  • 如果用户去吃午饭并被公共汽车撞到会发生什么 (; 标志永远不会被重置并且没有其他人可以编辑它。你应该实现concurrency control,例如使用TimeStamp 字段,因此如果用户 B 更改了数据,则会通知用户 A
猜你喜欢
  • 2020-06-09
  • 2021-04-18
  • 1970-01-01
  • 2020-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多