關(guān)于頁(yè)面刷新,事件重復(fù)提交的方法分享
更新時(shí)間:2012年10月11日 23:58:17 作者:
在處理頁(yè)面事件時(shí),我們會(huì)經(jīng)常會(huì)碰到這樣的情況:當(dāng)我們?cè)谔峤灰豁?xiàng)頁(yè)面表單時(shí),在提交成功后,當(dāng)我們?cè)噲D按F5刷新頁(yè)面時(shí),數(shù)據(jù)會(huì)再次的被重復(fù)提交
瀏覽器的刷新是指重復(fù)上一次向服務(wù)器發(fā)送的請(qǐng)求,而asp.net的服務(wù)器控件的事件都是通過postback機(jī)制向服務(wù)器發(fā)送請(qǐng)求的。所以,當(dāng)你點(diǎn)擊提交按鈕后再刷新,實(shí)際上是把提交按鈕的postback請(qǐng)求又發(fā)送了一次。而asp.net應(yīng)用服務(wù)器是無法區(qū)別這是正常點(diǎn)擊按鈕添加還是f5刷新添加(這涉及到頁(yè)面生命周期。。。),那么這樣就會(huì)導(dǎo)致在數(shù)據(jù)庫(kù)里會(huì)存在n 條一模一樣的數(shù)據(jù)。
在解決這個(gè)問題的過程中,嘗試了一下幾種方法:
(1)在事件提交后,將其中的參數(shù)置空,使得程序在執(zhí)行過程中,因?yàn)闆]有參數(shù)而不會(huì)做業(yè)務(wù)處理。這種處理方法沒有效果,因?yàn)榉?wù)器執(zhí)行的是上一次請(qǐng)求的事件,事件提交后,改變參數(shù)沒有任何意義。
(2)在事件提交后,將頁(yè)面進(jìn)行重定向到當(dāng)前頁(yè)面(Response.Redirect( "/basedata/PictureAdd.aspx" , true);)。因?yàn)槊總€(gè)頁(yè)面都具有自己的生命周期,進(jìn)行重定向后,即結(jié)束了當(dāng)前頁(yè)面操作。這種方法可行!
為什么在原Asp開發(fā)程序中不會(huì)碰到這樣的問題呢?我覺得是因?yàn)锳sp程序主要都是將表單提交給另外一個(gè)頁(yè)面處理,并且,這個(gè)頁(yè)面處理之后,將跳轉(zhuǎn)到另外一個(gè)提示頁(yè)面。那么在Asp程序中,只需要在回退時(shí)將頁(yè)面設(shè)置為過期那么就可以有效的避免重復(fù)提交的問題。但是在Asp.Net中,基本上所有的操作都是基于事件操作,而事件的本質(zhì)上就是頁(yè)面自己提交給自己,并且頁(yè)面無法識(shí)別提交時(shí)正常操作還是重復(fù)刷新。
在解決這個(gè)問題的過程中,嘗試了一下幾種方法:
(1)在事件提交后,將其中的參數(shù)置空,使得程序在執(zhí)行過程中,因?yàn)闆]有參數(shù)而不會(huì)做業(yè)務(wù)處理。這種處理方法沒有效果,因?yàn)榉?wù)器執(zhí)行的是上一次請(qǐng)求的事件,事件提交后,改變參數(shù)沒有任何意義。
(2)在事件提交后,將頁(yè)面進(jìn)行重定向到當(dāng)前頁(yè)面(Response.Redirect( "/basedata/PictureAdd.aspx" , true);)。因?yàn)槊總€(gè)頁(yè)面都具有自己的生命周期,進(jìn)行重定向后,即結(jié)束了當(dāng)前頁(yè)面操作。這種方法可行!
為什么在原Asp開發(fā)程序中不會(huì)碰到這樣的問題呢?我覺得是因?yàn)锳sp程序主要都是將表單提交給另外一個(gè)頁(yè)面處理,并且,這個(gè)頁(yè)面處理之后,將跳轉(zhuǎn)到另外一個(gè)提示頁(yè)面。那么在Asp程序中,只需要在回退時(shí)將頁(yè)面設(shè)置為過期那么就可以有效的避免重復(fù)提交的問題。但是在Asp.Net中,基本上所有的操作都是基于事件操作,而事件的本質(zhì)上就是頁(yè)面自己提交給自己,并且頁(yè)面無法識(shí)別提交時(shí)正常操作還是重復(fù)刷新。
您可能感興趣的文章:
- android中ListView多次刷新重復(fù)執(zhí)行g(shù)etView的解決方法
- javascript下阻止表單重復(fù)提交、防刷新、防后退
- Asp.Net防止刷新重復(fù)提交數(shù)據(jù)的辦法
- 十分鐘內(nèi)學(xué)會(huì) 避免用戶刷新導(dǎo)致重復(fù)POST提交
- asp.net 處理F5刷新頁(yè)面重復(fù)提交頁(yè)面的一個(gè)思路
- firefox下jquery iframe刷新頁(yè)面提示會(huì)導(dǎo)致重復(fù)之前動(dòng)作
- JSP刷新頁(yè)面表單重復(fù)提交問題解決辦法分享
- php環(huán)境下利用session防止頁(yè)面重復(fù)刷新的具體實(shí)現(xiàn)
- asp.net防止刷新時(shí)重復(fù)提交(可禁用工具條刷新按鈕)
- javaweb用戶注銷后點(diǎn)擊瀏覽器返回刷新頁(yè)面重復(fù)登錄問題的解決方法
相關(guān)文章
將Git存儲(chǔ)庫(kù)克隆到本地IntelliJ IDEA項(xiàng)目中的詳細(xì)教程
這篇文章主要介紹了將Git存儲(chǔ)庫(kù)克隆到本地IntelliJ IDEA項(xiàng)目中的詳細(xì)教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10
Kali滲透測(cè)試之使用Metasploit對(duì)Web應(yīng)用的攻擊
這篇文章主要介紹了Kali滲透測(cè)試:使用Metasploit對(duì)Web應(yīng)用的攻擊,這種漏洞源于Web應(yīng)用程序沒有對(duì)用戶輸入的內(nèi)容進(jìn)行準(zhǔn)確的驗(yàn)證,從而導(dǎo)致操作系統(tǒng)執(zhí)行了攻擊者輸入的命令,需要的朋友可以參考下2022-05-05
git push 本地項(xiàng)目推送到遠(yuǎn)程分支的方法(git命令版)
這篇文章主要介紹了git push 本地項(xiàng)目推送到遠(yuǎn)程分支的方法(git命令版),需要的朋友可以參考下2020-09-09

