2010-07-22 79 views
1

我在動態創建asp.NET在現有的DataGrid的不同行dragrids是否有F5刷新瀏覽器,回發?(asp.NET)

我產生DataGrid中有一列是TemplateColumn中之間的差異(一個CheckBox列)。

在我的父數據網格中,我有一個帶有複選框的模板列。當我選中或取消選中複選框的值時,會調用check_change方法(autopostback設置爲true),動態生成的數據網格將丟失選中的複選框(複選框全部取消選中)。但是,如果我檢查孩子(動態生成)網格的任何複選框,然後按F5,它會刷新頁面,但仍然有我選中的複選框。

發生了什麼? post-back與刷新F5有何不同?理解這可能會幫助我解決我的問題:DataGrid not being altered!

+0

你測試你的代碼 - 的'Page.IsPostBack'財產背後? – 2010-07-22 12:37:17

回答

2

很簡單,瀏覽器緩存響應。所以如果你按下F5鍵,你通常每次都會看到你的網格和選中的複選框。但是,如果您在代碼中進行回傳,您可以強制瀏覽器連接到服務器併發布數據。

然後它會等待來自服務器的響應,並返回回傳的原因。

惱人的,但這就是瀏覽器的工作原理。您可以強制完成刷新,而不是通過按Ctrl + F5來模擬回傳。

這是(有時)與瀏覽器相關的,因爲並非所有瀏覽器的行爲都與您在此處描述的相同。

如果回發是必要的,但您仍然希望保持複選框狀態爲選中狀態,那麼我建議您改用AJAX呼叫。

+0

您是否推薦使用asp.NET學習Ajax的站點? – 2010-07-22 12:35:19

+5

Ctrl + F5不會模擬回傳,它只是覆蓋瀏覽器的緩存。首次訪問頁面或刷新頁面時使用HTTP GET檢索頁面;回發使用HTTP POST將數據發佈到服務器。Ajax在這裏可能沒有幫助,你需要確保動態控件在每個回傳中都被保存。 – 2010-07-22 12:44:59

+1

道歉,我最好的英語失敗了:)我的意思是說CTRL + F5會清除緩存*就像*後臺會強制瀏覽器。我也同意他需要實現某種持久狀態,但是,這取決於具體的應用和對他有用的東西。我推薦學習AJAX的唯一網站是asp.net的網站本身和大量的Google搜索:) – AcidRaZor 2010-07-22 13:00:20

1

「刷新」只是調用最後一個頁面請求。所以,如果你只是瀏覽一個頁面然後點擊刷新,它只是再次請求頁面 。

回傳本質上是在頁面上發送 信息回到服務器的動作。

+0

你認爲我仍然可以在沒有回發的情況下觸發CheckChanged事件....這是我的問題,由於回發無法更改數據網格,並且同時無法在沒有回發的情況下觸發checkChanged! – 2010-07-22 12:24:54

0

理想情況下,它是一個PostBack,但它將取決於您的瀏覽器設置,如果您已將其設置爲從服務器請求頁面進行每次訪問或從本地Histroy Cache中選取。

點擊刷新按鈕會向服務器發出一個新的請求, ,它不會改變Http Method(Get , Post)的狀態,我的意思是它不會改變頁面的IsPostBack狀態。

但是提交表單(張貼形式)將IsPostBack屬性設置爲true 約page_load它會被稱爲爲兩種情況