【问题标题】:Asp.Net / SignalR : Ajax Partial ViewAsp.Net / SignalR:Ajax 部分视图
【发布时间】:2012-07-02 08:01:37
【问题描述】:

我对 SignalR 进行了大量研究和测试,但遇到了问题。

我正在创建一个 .Net MVC3 Web 应用程序。用户界面是这样的:

我不允许发布图片,因此您可以在此链接查看用户界面:

http://deasign.free.fr/InterfaceVadis.jpeg

目标是:

  • User1 进入 Webapp,点击一个 Item,看到 Editing 局部视图。
  • User2进入WebApp,点击同一个Item。我想为他锁定视图。

目标:一次只有一个用户可以编辑一个项目。

当用户 1 通过单击上一个/下一个/单击列表、注销或关闭浏览器离开编辑视图时,用户 2 必须立即(通过 SignalR)接收通知,并且编辑页面不再锁定

我尝试了几件事,但没有实现。

1°) 我必须在哪一部分声明 SignalR Hub ?在右局部视图或父页面上?我都尝试了,但无法让 Disconnect 功能按我的意愿工作:(

我希望我已经说清楚了,对不起我的英语

如果您需要其他信息,请不要犹豫

谢谢大家:)

【问题讨论】:

    标签: asp.net ajax asp.net-mvc-3 partial-views signalr


    【解决方案1】:

    对于所有用户操作,例如上一个/下一个/单击等,您只需调用集线器上的一个函数即可解锁项目:

    JS:

    $("#Next").click(function(e) {
      myHub.next();
    });
    

    CS:

    public class MyHub : Hub {
      public void next() {
        var itemId = ClientManager.GetCurrentEditedItemForClient(Caller.id);
        ItemManager.UnlockItem(itemId);
      }
    
      public void previous() {
        var itemId = ClientManager.GetCurrentEditedItemForClient(Caller.id);
        ItemManager.UnlockItem(itemId);
      }
    }
    

    至于客户通过关闭离开,我知道您可以实现 IDisconnect 接口并从那里处理断开连接:

    public class MyHub : Hub, IDisconnect {
        public void Disconnect()
        {
            var itemId = ClientManager.GetCurrentEditedItemForClient(Context.ClientId);
            ItemManager.UnlockItem(itemId);
        }
    }
    

    但是,我也知道我在实现断开连接时运气不佳。也许是一个例程,可以定期检查每个客户端或 pinger 的状态,任何东西。其他人可能对此有更好的想法。

    【讨论】:

    • 这正是我所做的,但和你一样,我对 IDisconnect 接口也有问题。我需要一个建议:你把 Hubconnection.Start 放在哪里?在 MasterPage 上,在 Partial Views 上?有时当我查看 Firebug 控制台时,我发现集线器连接已关闭
    • 我会说您必须首先将所有这些都放在 window.onload 事件中。然后,您可能希望在某个时候与上下文相关(即:仅在需要时连接到集线器)。要么你有某种方法来检查你是否在正确的上下文中(如果你的集线器使用捆绑器在它们自己的 JS 文件中),或者你在部分中启动它们。查看聊天示例:github.com/kenegozi/SignalR-Chat
    猜你喜欢
    • 2017-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-26
    • 2013-01-18
    相关资源
    最近更新 更多