可能是一個非常基本的初學者問題。恢復文本框(或任何其他控件)的舊值
想象一下以下情況:
我有一個ASP.NET頁面的文本框和一個按鈕。在我輸入的文本框中,假設名稱爲「Laurel」,然後單擊該按鈕。該文本框作爲控制參數與數據源相關聯,此數據源從文本框中提取內容「Laurel」以構建查詢,選擇客戶Laurel的所有訂單並將它們發送回瀏覽器,並在列表中顯示它們(例如gridview)。該列表很長,並且有兩頁(該列表具有尋呼機控制)。該列表位於文本框所在的同一頁面上。所以我現在在我的瀏覽器中看到一個帶有文本框(仍包含文本「Laurel」)的頁面和一個帶有尋呼機的列表。
我現在可以做兩個動作:
- 在文本框中輸入名稱「哈」,並點擊按鈕:週期以上再次運行,並顯示顧客哈迪的訂單。這很好,我想要的。
- 點擊尋呼機控制按鈕,顯示勞雷爾訂單的第二頁。這是有效的,因爲我仍然在文本框中有「Laurel」。因此,在由尋呼機控制觸發的回發中,數據源可以從文本框中再次提取「Laurel」作爲查詢參數,運行查詢並將第二頁訂單發送到我的瀏覽器。這也沒關係。
其實有可能是第三個動作:
- 我在文本框中輸入名稱「哈」,然後改變了主意,決定我希望看到勞雷爾的順序的第二頁。所以我在文本框中有「哈代」,但不要點擊提交按鈕,而是點擊傳呼機控制的「下一頁」來查看第二頁。在服務器上,數據源提取文本框的「哈代」內容,運行查詢,然後嘗試傳遞哈代的第二頁,而不是勞雷爾的命令。所以這不是我想要的。 (也許哈迪只有幾個訂單,沒有足夠的兩頁,數據源可能會告訴我,然後「沒有發現」,因爲沒有什麼哈迪第二頁。)
(我的意思也可以在這裏可以看到在stackoverflow:在搜索框中輸入一些東西,例如「ASP.NET」,然後按回車鍵,你會得到一個很長的結果列表,並在搜索框中輸入另一個詞,例如「PHP 「但是不要回車,而是在頁面底部的頁面控制器中點擊第2頁,發佈回傳(我猜也會傳輸搜索框的新內容」PHP「),關鍵字」 ASP.NET「並且搜索框不再包含」PHP「,而是再次」ASP.NET「)。
現在的問題是:我怎樣才能避免這樣的情況?我的基本思想是:我需要恢復文本框中的舊值「Laurel」,以向數據源查詢提供正確的參數值,並且我的舊值「Laurel」必須存儲在「某處」(在服務器上?在服務器上?如果客戶端,隱藏在頁面或cookie中,或者...?)。是否有一些標準模式來處理這個要求?還是我在錯誤的方向思考?
預先感謝您!
感謝您的反饋!我只是看到,stackoverflow似乎使用QueryStrings來存儲搜索詞。我瞭解利用會話對象和隱藏字段的解決方案。但是,我不確定如何使用ViewState對象。直到現在,對於我來說,這始終是ASP.NET內部用於狀態管理的工具,沒有任何旨在以編程方式使用的工具。我必須閱讀更多關於ViewState的信息。成功使用會話對象需要在客戶端瀏覽器中接受Cookie,這是否正確? – Slauma 2010-03-04 14:49:58
ViewState和Session訪問編碼相同 - 請參閱http://stackoverflow.com/questions/944484/syntax-to-access-variables-in-viewstate。通常,使用會話確實需要cookie,但您可以設置無Cookie會話,其中的ID作爲URL的一部分傳入。 (http://stackoverflow.com/questions/2273066/what-are-cookieless-sessions) – 2010-03-04 15:18:20