簡體   English   中英

使用ASP.net刷新/重新加載副作用?

[英]Refreshing/Reloading side effect with ASP.net?

我在網絡和ASP.Net開發方面比較新,所以請耐心等待。 在測試我們的網頁的過程中,我注意到如果用戶單擊“刷新/重新加載”,並在“重新發送信息”對話框上出現提示時單擊“重試”,則在用戶選擇之前觸發的最后一個事件“刷新”,隨后將再次解雇。
作為一個例子,我們有“上一頁”和“下一頁”導航按鈕,允許用戶瀏覽一系列問題。 如果操作員點擊“刷新/重新加載”,那么用戶按下最后一個導航按鈕將再次點火。 這實際上是有道理的,但凈效果是用戶最終在他以前查看的下一頁或上一頁上。 這種事情有解決方法嗎?

這是由於您處理PostBacks的方式。

有一點背景是必要的:

Web是“無狀態的”,這意味着從客戶端到服務器的每個請求都與之前的請求或之后的請求無關。 沒有“國家”維持。 如果您查看HTTP級別,它只是發送到服務器的文本blob,上面寫着“向我發送此信息”,然后服務器將其發送回去。 沒有“我是3分鍾前在這里的同一個用戶,我想從上次發言時轉到下一頁”。

ASP.NET解決此問題的方法是使用ViewState和回發。 每次單擊ASP.NET按鈕時,它實際上都是提交一個包含隱藏字段和一堆編碼數據的表單。 該數據包含服務器需要“重建”頁面狀態的所有信息,因為它是最后一次。 然后它可以執行“移動到下一頁”,該命令是有意義的。 當ASP.NET將HTML發送回客戶端時,它會使用新數據更新該隱藏字段,再次表示頁面狀態,就像現在一樣。 下次單擊任何按鈕時,將再次發送數據,再次重新構建頁面並重復循環。

當用戶點擊“刷新”時,瀏覽器會詢問他們是否要重新提交表單。 他們正在重新提交他們上一次所做的相同數據。

對你的影響:

如果您嘗試跟蹤有關用戶的任何數據或他們獨立於ASP.NET ViewState執行的操作,則需要確保每次頁面處理時都同步該數據。

您可能希望在ViewState中保留“當前頁面”:

ViewState.Add("CurrentPage", intCurrentPage);

因此,當您調用MoveNext事件處理程序時,您可以確保相對於頁面移動,因為它是最后一次發送到客戶端。

你可以看看在asp.net mvc中更常用的Post-Redirect-Get模式。

有關詳細信息,請參見此處

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM