asp.net的程序都是部署在服務(wù)器上的,也就是說(shuō)你在瀏覽器上看到的任何東西都是你像服務(wù)器發(fā)送了一個(gè)http請(qǐng)求,服務(wù)器經(jīng)過(guò)一些處理之后再反饋給你。(.aspx.cs文件就是服務(wù)器端代碼)拋開(kāi)AJAX技術(shù)不談,你打開(kāi)頁(yè)面之后,頁(yè)面上的內(nèi)容是靜止不變的,只有當(dāng)你刷新了一下頁(yè)面或者點(diǎn)了頁(yè)面上某個(gè)button,頁(yè)面刷新了一下,頁(yè)面上的內(nèi)容才有可能更改,而這個(gè)更改就是你去服務(wù)器又請(qǐng)求了一次頁(yè)面內(nèi)容而已。
asp.net的回發(fā),有點(diǎn)類似于這種上述的這種機(jī)制,有的回發(fā)是希望服務(wù)器重新反饋一次內(nèi)容;有的回發(fā)則是希望往服務(wù)器發(fā)送一些內(nèi)容。
舉個(gè)例子:asp.net的textbox控件上有一個(gè)屬性叫autopostback——讓你設(shè)置該文本框在失去焦點(diǎn)時(shí)是否回發(fā)。如果你沒(méi)設(shè)置,當(dāng)你在文本框內(nèi)填入內(nèi)容,并失去焦點(diǎn)時(shí),服務(wù)器這時(shí)候是不知道你填的是什么內(nèi)容,之后你將表單遞交了之后,服務(wù)器才會(huì)知道。如果你設(shè)置了,當(dāng)你輸入內(nèi)容并失去焦點(diǎn)之后,頁(yè)面就自動(dòng)將文本框的內(nèi)容發(fā)回給服務(wù)器了,而不需要你再去點(diǎn)擊某些遞交按鈕。
有時(shí)候我們可以用這個(gè)做一個(gè)簡(jiǎn)單的數(shù)據(jù)驗(yàn)證操作,比如做一個(gè)注冊(cè)頁(yè)面,輸入身份證號(hào)后,需要立即驗(yàn)證該身份證號(hào)在數(shù)據(jù)庫(kù)里是否已經(jīng)存在,那么就可以將該文本autopostback設(shè)置成true,這樣一旦輸入身份證并失去焦點(diǎn)之后,可以將該身份證號(hào)自動(dòng)發(fā)送到服務(wù)器(后臺(tái))進(jìn)行驗(yàn)證,而不需要將所有內(nèi)容都填寫(xiě)完畢在遞交的時(shí)候再進(jìn)行驗(yàn)證。
當(dāng)然這種模式,會(huì)帶來(lái)頁(yè)面的刷新現(xiàn)象,用戶體驗(yàn)不好,因此很少用到,一般都是用AJAX來(lái)實(shí)現(xiàn)的。
對(duì)回發(fā)用的最多的,我覺(jué)得還是在page_load里邊的判斷語(yǔ)句,if(!ispostback){具體操作}
這樣的效果等同于=如果不是回發(fā)而引起的,就執(zhí)行具體操作。也就是說(shuō)能保證page_load里邊的代碼只執(zhí)行一次,而不會(huì)因?yàn)槟泓c(diǎn)擊了頁(yè)面上的button按鈕刷新了頁(yè)面,而每次都會(huì)執(zhí)行。