八.關於AutoPostBack機制和事件的觸發
Server端程式(ASP.NET)想要知道已經Render到Client端的控制項,究竟發生了什麽事件,就一定得來一個postback,否則Server端的ASP.NET程式,根本無從得知Client端網頁(上面的控制項)究竟發生了什麽事件。
這種情況在ASP.NET中時常發生。因此,ASP.NET技術中,乾脆做一個共用的機制,來處理這樣的【PostBack+控制項事件】。
知道這個“共用的機制”,我們可以完美上面的代碼。
Render部分:
'底下的Render會產生一段按鈕的HTML 例如:<Button> 標題文字 </Button>
Protected Overrides Sub Render(ByVal output As System.Web.UI.HtmlTextWriter)
'Render控制項HTML碼
Dim JavaScript As String
'建立 Postback 用的 JavaScript
JavaScript = Me.Page.GetPostBackEventReference(Me, "")
output.AddAttribute("onclick", JavaScript)
output.AddAttribute("id", Me.ClientID)
output.AddAttribute("name", Me.ClientID)
output.RenderBeginTag("button")
output.Write(Me.Text)
output.RenderEndTag()
End Sub
複寫OnLoad事件部分
'覆寫OnLoad事件,
Protected Overrides Sub OnLoad(ByVal e As System.EventArgs)
Dim controls As WebControls.WebControl
Dim args As String
'改成只剩這行
If Me.Page.Request("__EVENTTARGET") = Me.ID Then RaiseEvent OnClick()
MyBase.OnLoad(e)
End Sub