2012-08-09 90 views
0

一個WebForm我可以用它來解決這個問題的一個實例。每個會話

2網頁:Index.aspx - Work.aspx

Index.aspx:他們打算將工作重定向到Work.aspx的鏈接後所做工作的統計信息和信息。

Work.aspx:開始與客戶合作。

因此,我需要完成的是Work.aspx的單個實例。因爲當他們使用Work.aspx時,Index.aspx仍然是開放的(他們需要研究數據和內容),但是如果他們碰到了Work.aspx的鏈接,他們就會打開另一個實例,這不是我想要的。

我不知道完成此操作的最佳方式是什麼,因爲所有Ive在Mutex上發現的都是基於winforms的。 (如果它恰好是你有一些鏈接處理互聯網信息在webform中,然後我可以從那裏開始,但我還沒有找到那個)

任何幫助將非常感激。 謝謝。

編輯。 Work.aspx是一個彈出窗口,因此員工同時打開兩個Web窗體。

+0

您需要每個用戶使用單個實例還是全局使用單個實例? – 2012-08-09 13:33:25

+0

每個員工都需要一個,他們不必被允許打開另一個(一次在2個客戶端上工作) – 2012-08-09 13:35:31

+1

對不起,但我不知道你想說什麼。你的意思是你想打開一個彈出窗口而不是重定向嗎?你是在談論單一用戶他的互動還是一個羣體? Aspx頁面是在客戶端請求它們時創建的,你不能擁有它們的單個實例,它們活着幾秒鐘,然後被解析成html,然後放在客戶端瀏覽器的內存中。 – Kristof 2012-08-09 13:36:27

回答

2

如果我明白你在問什麼,你可以嘗試使用Hyperlink.Target屬性在同一命名窗口中始終打開Work.aspx。響應

<asp:Hyperlink runat="server" ... NavigateUrl="Work.aspx" Target="work" ... /> 

更新評論

他們觸發了一些東西,以便與他們所需要的信息來填充Work.aspx ...

你需要什麼do是「記住」Work.aspx服務器端的狀態,例如通過將狀態數據存儲在Session(或其他地方:例如數據庫)中。然後每次請求Work.aspx時,都會呈現具有適當狀態的版本。

我現在能想到的是:當他們第一次打開work.aspx。將Session變量設置爲true。下一次他們再次擊中START-WORKING時,請事先檢查會話變量,以瞭解是否允許。你是否指這種喬?

我認爲他們應該總是被允許打開一個新的Work.aspx。畢竟,用戶可能已經關閉了之前的Work.aspx窗口,並且您不會了解該服務器端。您應該始終允許用戶「開始工作」 - 但將Work.aspx顯示爲最近的狀態,並將其保存在服務器端的某個位置(例如Session)。

+0

不認爲它會起作用。當他們點擊index.aspx中的鏈接打開work.aspx時,他們觸發了一些事情,以便用他們需要的信息填充Work.aspx。所以,如果打開WORK.aspx,我不需要觸發任何東西,只要他們點擊index.aspx上的鏈接。 – 2012-08-09 13:44:38

+1

@DanielSh所以使用會話標誌或添加「LastRequest」字段到用戶表並檢查它。 – 2012-08-09 13:45:39

+0

我現在能想到的是:當他們第一次打開work.aspx時。將Session變量設置爲true。每次他們再次擊中START-WORKING時,請事先檢查會話變量以確定它們是否被允許。你是否指這種喬? – 2012-08-09 13:55:33

3

沒有也沒有辦法做到這一點。 Web應用程序本質上是無狀態的,每個與用戶的交互都由獨立的請求 - 響應對組成。 asp.net爲每個請求創建Web窗體的新實例,並使用它來處理請求並在之後刪除它。

那你究竟需要什麼呢?在大多數情況下,可以有多個頁面,但仍然是相同的數據。

+0

Work.aspx是員工用於處理各自案件的網絡。如果他們在index.aspx上執行了10次START-WORKING,他們將有10個WORK.aspx webforms。我只希望他們有1。希望我明確自己。 – 2012-08-09 13:40:41

+0

@DanielSh。你**不能**那樣做。你所能做的就是在每次後續調用'work.aspx'的時候返回一些其他的內容,但是你將會在確定用戶*何時被允許工作以及何時他/她不是*時遇到麻煩。 – 2012-08-09 13:42:39