我有一個包含兩個div的ASP.NET頁面。兩者都包含搜索字段和每個字段中包含的搜索按鈕。當我第一次到這個頁面時,Div A有'SearchDiv'類,而Div B有'SearchDivDisabled'。這些類改變了外觀,因此用戶知道他們當前已經啓用了哪種搜索類型。當使用「返回」按鈕時Div的Class不會持續
當單擊Div B時,JavaScript將其更改爲「SearchDiv」類,並將Div A更改爲「SearchDivDisabled」。這一切都像一個魅力。我遇到的問題是當用戶更改Div B時,單擊Div B的搜索按鈕(顯然重定向到結果頁面),然後使用瀏覽器的後退按鈕。當他們返回到搜索頁面時,Div A被再次啓用,並且Div B被禁用,即使他們最後使用了Div B.在搜索按鈕事件處理程序中,我在重定向之前設置了Div的class屬性,希望這會更新服務器上的頁面,因此當用戶返回時,其最後啓用的Div仍將被啓用(不管在首次訪問頁面時啓用了哪一個)。
我相信這涉及到ViewState,但我不確定爲什麼class屬性沒有保存,所以當用戶返回到它所恢復的頁面時。有沒有我在這裏失蹤的東西,或者一些簡單的方法來保證我想要的行爲?謝謝!
編輯:這是按鈕事件處理代碼:
protected void RedirectToResults(int searchEnum, string resultPage)
{
ShowContainer(searchEnum);
Response.Redirect(resultPage + this.webParams.getAllVariablesString(null));
}
protected void ShowContainer(int searchContainerToShow)
{
if (searchContainerToShow < 0 || searchContainerToShow > SearchContainers.Count || SearchContainers.Count == 0)
return;
//disable all search panels
foreach (SearchContainer container in SearchContainers.Values)
{
container.searchDiv.Attributes.Add("class", "SearchDivDisabled");
}
//enable selected panel
SearchContainers[searchContainerToShow].searchDiv.Attributes.Add("class", "SearchDiv");
}
RedirectToResults()
從與代表所選搜索面板和結果頁面的URL枚舉實際的按鈕事件處理函數調用。 SearchContainers是一個將整數映射到搜索Div的字典。重要的代碼是最後一行,我正在使用「主動」搜索類更新所選搜索容器,而不是禁用的搜索容器(我將其分配給其他div)
其他更新:我在過去的幾天一直在與這個問題作鬥爭。我是那種能夠得到下面的代碼工作(在Page_Load中):
Response.AppendHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
Response.AppendHeader("Pragma", "no-cache"); // HTTP 1.0.
Response.AppendHeader("Expires", "0"); // Proxies.
但是,這真的是沒有辦法了,因爲其他一切被正確緩存丟失,這讓我更糟糕時相比,我開始了。其他一切似乎都很好,這只是導致我掙扎的div類。
編輯:只是想更新此爲任何其他人遇到此問題。雖然我相信這裏有一個解決方案,設置頁面的緩存能力以強制瀏覽器回發,但是我無法使所有瀏覽器都能正常工作(主要是Firefox給了我適合,這是一個記錄的錯誤)。我確實相信cookie解決方案會起作用,但我覺得這可能比僅僅存儲一對夫婦的狀態所需的複雜一點。
我最終做的是將div的類綁定到它關聯的單選按鈕的狀態(div旁邊有一個單選按鈕,允許用戶使用更直觀的方式啓用搜索麪板)。我注意到這些單選按鈕在使用後退按鈕時保留了正確的選中值,所以我可以保證他們會指出要啓用的正確的div。因此,在JavaScript的onload中,我檢查啓用了哪個單選按鈕,然後相應地調整搜索div的類。這是一個非常大的黑客攻擊,但是在所有瀏覽器中都有100%的效果,並且只用了大約10行JavaScript。
如上所述,'在搜索按鈕事件處理程序中,我在重定向之前設置Div的class屬性,希望這會更新服務器上的頁面,所以當用戶返回時,最後啓用的Div仍然會啓用'所以我正在這樣做。我將用代碼更新原始帖子。 – Kevin 2010-08-18 14:00:16