控制項學習五(PostBack之後觸發事件)
七.在PostBack之後觸發事件
<input type=”button”...>,并不會產生PostBack,因為它不是type=”submit”。
PostBack,其實就是WebForm的submit。
下面我們讓Button可以PostBack:
Protected Overrides Sub Render(ByVal output As System.Web.UI.HtmlTextWriter)
output.AddAttribute("onclick", “Form1.submit();”) ‘加上onclick=”Form1.submit();”
output.RenderBeginTag("button")
output.Write(Me.Text)
output.RenderEndTag()
End Sub
現在,面對另外一個問題,PostBack是產生了,但是onClick事件沒有被觸發,因為我們并沒有在控制項的程式中加上RaiseEvent指令,在什麽地方加RaiseEvent??下面是改后的程式:
'底下的Render會產生一段按鈕的HTML 例如:<Button> 標題文字 </Button>
Protected Overrides Sub Render(ByVal output As System.Web.UI.HtmlTextWriter)
'註冊一個隱藏欄位
Me.Page.RegisterHiddenField("For_WebCustomControl1", "")
'Render控制項HTML碼
Dim JavaScript As String
'建立 Postback 用的 JavaScript
JavaScript = "Form1.For_WebCustomControl1.value='" & Me.ClientID & "';Form1.submit();"
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
把控制項ID塞到隱藏欄位幹嗎?
因為我們要在Postback(Submit)之後,藉由這個隱藏欄位,來判斷究竟是哪一個控制項引起的Postback(Submit),然後觸發相對的事件,我們看程式碼:
Protected Overrides Sub OnLoad(ByVal e As System.EventArgs)
'如果隱藏欄位裡面的值,是控制項的 ClientID 則觸發 OnClick事件
If Me.Page.Request.Form("For_WebCustomControl1") = Me.ClientID Then
RaiseEvent OnClick()
End If
MyBase.OnLoad(e)
End Sub
我們複寫了控制項的【OnLoad】事件,因為我們要在這個控制項的OnLoad事件裡面判斷,剛才產生的Postback(Submit)究竟是否為自己所引發?