程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> Asp.Net的控件如何與Server交互

Asp.Net的控件如何與Server交互

編輯:關於ASP.NET

以前寫asp的程序的時候,知道只有type設置為submit的按鈕,才能觸發表單提交數據給服務器端。

如:Asp.Net中的Button就是等於<input type="submit">.

但是現在Asp.Net的好多控件都可以任意的和服務器端交互,如:LinkButton.

這是怎麼實現的呢?

難道是一種全新的方式嗎?

其實,這只是微軟的一種變通的方式。

我們先來看看客戶端的代碼是如何的.

我這裡是一個帶有LinkButton的頁面,

其實LinkButton在客戶端就等於html裡的A.

我們來看看LinkButton為什麼也能和服務器端交互?

當我們點擊右鍵查看該頁面的源代碼時,看到:

<script type="text/javascript">
<!--
var theForm = document.forms['ctl00'];
if (!theForm) {
  theForm = document.ctl00;
}
function __doPostBack(eventTarget, eventArgument) {
  if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
    theForm.__EVENTTARGET.value = eventTarget;
    theForm.__EVENTARGUMENT.value = eventArgument;
    theForm.submit();
  }
}
// -->
</script>

<a id="simpleLinkButton1" href="javascript:__doPostBack('simpleLinkButton1','')">Click Me</a>
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
從上面的代碼中就可以看出simpleLinkButton1是一個鏈接,通過客戶端代碼來提交所在的表單。

而其中兩個隱藏域,則用來交換數據的,就是把__doPostBack的兩個參數值賦給這兩個隱藏域。

這就是為什麼LinkButton也具有提交數據的最直觀的原因。

那麼這上面的代碼是怎麼生成的呢?

我們看LinkButton的源代碼就可以清楚地知道:

protected internal override void OnPreRender(EventArgs e)
{
   base.OnPreRender(e);
   if ((this.Page != null) && this.Enabled)
   {
      this.Page.RegisterPostBackScript();
      if ((this.CausesValidation && (this.Page.GetValidators(this.ValidationGroup).Count > 0)) || !string.IsNullOrEmpty(this.PostBackUrl))
      {
         this.Page.RegisterWebFormsScript();
      }
   }
}

以上只是把自己在學習工作過程中的一些體會記錄如此,防止自己忘記了。

也望和大家多多交流

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved