ASP.NET進階(2):IsPostBack和BindForm

來源:互聯網
上載者:User

說明:本文裡會使用InputId為控制項的ID,InputName控制項的name,InputId.Text控制項的值,UrlPramaName Url參數名,BindForm()綁定表單的方法。以後還會使用一些虛擬碼,和這種“未聲明”的代碼。盡量單詞達意。

Request.Form可能有同學會問為什麼你用Request.Form["InputName"]啊,我們都是用InputId.Text,我們只是用Request.QueryString["UrlPramaName"]來擷取Url的參數值。 事實上,這兩種方式都是可以的,而且通常控制項產生的Html代碼裡Id和Name值也都是一樣的(其實這並不好,以後會講)。當點擊提交按鈕後,頁面被重新載入,並且給控制項賦了值。所以,InputId.Text就可以擷取到具體控制項的值。

問題是控制項是被怎麼賦值的?你知道嗎?IsPostback為什麼頁面第一次載入的時候IsPostback是false,而提交之後變成了true,我們上節不是說post也是頁面請求嗎,怎麼兩次請求,IsPostback值卻有變化呢?
當我們的form被提交後,瀏覽器會幫我們把form裡的控制項的值post到form的action所指向的頁面(一般也是本身頁面)。這時,IIS收到請求和Post資料後,便會知道是提交資料,而不是像第一次開啟(重新整理其實和第一次開啟是一樣的),沒有資料。所以,後台類(PageName.aspx.cs)在執行過程中的時候會把IsPostback設定為true! “Is Post Back”的含義即是“是否提交後(的請求)”的意思。 

所以往往我們寫按鈕的Click事件時,在Page_Load方法裡經常會 if(!IsPostBack) BindForm();//給表單所有控制項賦值的方法。意思是提交後我就不綁定表單了,而是走Click的具體事件方法。

為什麼重新整理的時候按鈕沒有執行click事件,而提交後就可以了呢?因為第一次載入(普通請求)的時候按鈕的Click事件沒有訂閱者法,而點擊提交後,按鈕的Click事件訂閱了具體的事件方法。就像IsPostback一樣,相當於按鈕的成員被賦值了。BindForm【注意】為什麼不再綁定表單? 其實逛逛CSDN,大家會發現很多人都會問一個問題————為什麼他明明修改了控制項的值,但是提交後資料沒變呢? 然後很多人回帖說,加一個IsPostback判斷! 你知道為什麼要加了嗎? 呵呵,因為如果再次執行bindform的話,控制項的值會被重新賦值,那麼你再運行按鈕事件時就會取到舊的值。那麼,為什麼我不執行BindForm,form在提交後(重新整理了)頁面的控制項依然有值呢? 這不是很奇怪?呵呵,其實這當然是有值的了,不然你在往資料庫寫記錄的時候InputID.Text 的資料哪裡來的,而且你的BindForm不外乎就是給InputId.Text = "xxx" 賦值麼 :)。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.