2012-02-15 66 views
1

我有一個ASP.NET 4.0網站。在該站點中,UpdatePanel中有一個treeview控件。ASP.NET 4.0,ScriptManager和HistoryPoints

請記住 - 當用戶第一次訪問該頁面時,沒有發生回發(更多在這一分鐘內)。

當用戶點擊樹中的節點時,它會觸發回發。當用戶在樹上移動時,我可以設置歷史積分 - 這不是什麼大問題。歷史點是所選節點的ID。 (我想用這個來驅動頁面上的其他信息)

有兩種行爲,我看到了,我很爲難至於如何糾正這些:

  • 首先,歷史點似乎總是指向當前項目。如果我從項目A開始,然後單擊項目B,當我點擊後退按鈕時,我在項目B處結束幾次點擊(就好像歷史點都設置爲相同的值)。我認爲歷史應該是用戶點擊的節點的運行列表......但在這種情況下,似乎列表始終是包含當前ID的歷史點的集合。 (如果有人知道如何在腳本管理器中公開歷史點的集合,我很想聽聽它是如何做到的)
  • 其次,還有更令人頭疼的是,當樹最初加載時,沒有回傳。有沒有辦法設置沒有Ajax回發的歷史點? (我想有一種方法來保存樹的默認狀態,但現在從根目錄轉到項目A,然後點擊返回會將用戶轉到我打開頁面之前的任何頁面)

有沒有其他人注意到ScriptManager的歷史點怪異的行爲?

我也想過替代方案 - 比如viewstate,隱藏字段,cookie,會話變量......但是我沒有碰到任何我嘗試過的解決方案。有沒有辦法讓後退按鈕工作沒有的歷史點? (我認爲不存在)

回答

2

要設置沒有回傳的歷史點,請致電ScriptManager.AddHistoryPoint()

我會冒險猜測添加歷史點不是問題,但在ScriptManager.Navigate中,您沒有正確加載狀態,或者您正在依賴已經更新到Item的會話信息B.

查看歷史記錄狀態的一種方法是爲每個歷史記錄條目指定一個描述性足以描述頁面狀態的名稱/標題。對於測試,您可以使用狀態字符串散列的縮短版本,或者只是建立一個字符串來標識頁面的狀態,然後當您單擊並按住後退按鈕查看最近的瀏覽器歷史記錄時,您將看到具有描述性名稱的頁面以識別它們。

這裏的MSDN頁談論:http://msdn.microsoft.com/en-us/library/cc472966.aspx

BTW:對不起,我遲到了這個問題。如果你仍然有問題,發佈一些代碼,以便我們可以看到你在做什麼。我在幾個頁面的更新面板中使用樹控件在頁面上實現了歷史點功能。