關(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ù)器控件的事件都是通過(guò)postback機(jī)制向服務(wù)器發(fā)送請(qǐng)求的。所以,當(dāng)你點(diǎn)擊提交按鈕后再刷新,實(shí)際上是把提交按鈕的postback請(qǐng)求又發(fā)送了一次。而asp.net應(yīng)用服務(wù)器是無(wú)法區(qū)別這是正常點(diǎn)擊按鈕添加還是f5刷新添加(這涉及到頁(yè)面生命周期。。。),那么這樣就會(huì)導(dǎo)致在數(shù)據(jù)庫(kù)里會(huì)存在n 條一模一樣的數(shù)據(jù)。
在解決這個(gè)問(wèn)題的過(guò)程中,嘗試了一下幾種方法:
(1)在事件提交后,將其中的參數(shù)置空,使得程序在執(zhí)行過(guò)程中,因?yàn)闆](méi)有參數(shù)而不會(huì)做業(yè)務(wù)處理。這種處理方法沒(méi)有效果,因?yàn)榉?wù)器執(zhí)行的是上一次請(qǐng)求的事件,事件提交后,改變參數(shù)沒(méi)有任何意義。
(2)在事件提交后,將頁(yè)面進(jìn)行重定向到當(dāng)前頁(yè)面(Response.Redirect( "/basedata/PictureAdd.aspx" , true);)。因?yàn)槊總€(gè)頁(yè)面都具有自己的生命周期,進(jìn)行重定向后,即結(jié)束了當(dāng)前頁(yè)面操作。這種方法可行!
為什么在原Asp開(kāi)發(fā)程序中不會(huì)碰到這樣的問(wèn)題呢?我覺(jué)得是因?yàn)锳sp程序主要都是將表單提交給另外一個(gè)頁(yè)面處理,并且,這個(gè)頁(yè)面處理之后,將跳轉(zhuǎn)到另外一個(gè)提示頁(yè)面。那么在Asp程序中,只需要在回退時(shí)將頁(yè)面設(shè)置為過(guò)期那么就可以有效的避免重復(fù)提交的問(wèn)題。但是在Asp.Net中,基本上所有的操作都是基于事件操作,而事件的本質(zhì)上就是頁(yè)面自己提交給自己,并且頁(yè)面無(wú)法識(shí)別提交時(shí)正常操作還是重復(fù)刷新。
在解決這個(gè)問(wèn)題的過(guò)程中,嘗試了一下幾種方法:
(1)在事件提交后,將其中的參數(shù)置空,使得程序在執(zhí)行過(guò)程中,因?yàn)闆](méi)有參數(shù)而不會(huì)做業(yè)務(wù)處理。這種處理方法沒(méi)有效果,因?yàn)榉?wù)器執(zhí)行的是上一次請(qǐng)求的事件,事件提交后,改變參數(shù)沒(méi)有任何意義。
(2)在事件提交后,將頁(yè)面進(jìn)行重定向到當(dāng)前頁(yè)面(Response.Redirect( "/basedata/PictureAdd.aspx" , true);)。因?yàn)槊總€(gè)頁(yè)面都具有自己的生命周期,進(jìn)行重定向后,即結(jié)束了當(dāng)前頁(yè)面操作。這種方法可行!
為什么在原Asp開(kāi)發(fā)程序中不會(huì)碰到這樣的問(wèn)題呢?我覺(jué)得是因?yàn)锳sp程序主要都是將表單提交給另外一個(gè)頁(yè)面處理,并且,這個(gè)頁(yè)面處理之后,將跳轉(zhuǎn)到另外一個(gè)提示頁(yè)面。那么在Asp程序中,只需要在回退時(shí)將頁(yè)面設(shè)置為過(guò)期那么就可以有效的避免重復(fù)提交的問(wèn)題。但是在Asp.Net中,基本上所有的操作都是基于事件操作,而事件的本質(zhì)上就是頁(yè)面自己提交給自己,并且頁(yè)面無(wú)法識(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ù)提交問(wèn)題解決辦法分享
- php環(huán)境下利用session防止頁(yè)面重復(fù)刷新的具體實(shí)現(xiàn)
- asp.net防止刷新時(shí)重復(fù)提交(可禁用工具條刷新按鈕)
- javaweb用戶注銷(xiāo)后點(diǎn)擊瀏覽器返回刷新頁(yè)面重復(fù)登錄問(wèn)題的解決方法
相關(guān)文章
windows 中 \r\n 區(qū)別于 類(lèi)unix中的\n 疑問(wèn)說(shuō)明
windows 中 \r\n 區(qū)別于 類(lèi)unix中的\n 疑問(wèn)說(shuō)明,需要的朋友可以參考下。2011-07-07詳解IDEA Git Reset 選項(xiàng)說(shuō)明
這篇文章主要介紹了詳解IDEA Git Reset 選項(xiàng)說(shuō)明,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08重裝win10系統(tǒng)超詳細(xì)的圖文教程(適用所有windows系統(tǒng))
這篇文章主要介紹了重裝win10系統(tǒng)超詳細(xì)的圖文教程(適用所有windows系統(tǒng)),非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-11-11