2012-07-01 69 views
1

我對SignalR做了大量的研究和測試,並且遇到了一些問題。Asp.Net/SignalR:Ajax局部視圖

我正在創建一個.Net MVC3 web應用程序。用戶界面是這樣的:

我'不許發表圖片,這樣你就可以在這個鏈接查看用戶界面:

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

我們的目標是:

  • User1輸入Webapp,單擊一個項目,然後看到編輯部分視圖。
  • User2進入WebApp,點擊相同的項目。我想爲他鎖定視圖。

目標:一次只有一個用戶可以編輯項目。

當用戶1離開被點擊上一個/下/點擊編輯視圖列表上,註銷或只是關閉了瀏覽器的用戶2不得不接受立即(通過SignalR)的通知和編輯頁面不再被鎖定

我已經嘗試了幾件事,但沒有實現它。

1°)在哪個部分我必須聲明SignalR Hub?在正確的部分視圖還是在父頁面上?我都嘗試,但無法使斷開功能的工作,因爲我想:(

我希望我已經清楚,對不起我的英語

如果需要其他信息,請不要猶豫

感謝所有:)

回答

0

對於所有用戶的操作,比如前一個/下/點擊等,你可以只調用的樞紐功能,將解鎖的項目:

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); 
    } 
} 

不過,我也知道,我的天堂斷開連接的實施沒有太大的運氣。也許是一個會檢查每個客戶的狀態,或者一個平庸,任何事情的例行公事。其他人可能對此有更好的想法。

+0

這正是我所做的,但就像你我有IDisconnect接口的問題。 我需要一個建議:你把Hubconnection.Start放在哪裏?在MasterPage上,在部分視圖上?有時當我在Firebug控制檯上看時,我發現集線器連接已關閉。 – Massanu

+0

我想說你必須首先將所有這些放在window.onload事件中。然後,您可能希望在某個時刻處於上下文關係(即:僅在需要時才連接到集線器)。要麼你有一些方法來檢查你是否在正確的上下文中(如果你的集線器使用捆綁器在他們自己的JS文件中),或者你在部分中啓動它們。查看聊天示例:https://github.com/kenegozi/SignalR-Chat – Allov