控制項學習五(PostBack之後觸發事件)

 

.在PostBack之後觸發事件

<input type=”button”...>,并不會產生PostBack,因為它不是type=”submit”

PostBack,其實就是WebFormsubmit

下面我們讓Button可以PostBack

    Protected Overrides Sub Render(ByVal output As System.Web.UI.HtmlTextWriter)

        output.AddAttribute("onclick", Form1.submit();) 加上onclick=Form1.submit();

postback之前,先把ClientID塞到隱藏欄位中,然後再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)究竟是否為自己所引發?

posted @ 2008-11-15 16:39  yellowwood  阅读(296)  评论(0编辑  收藏  举报
Never Give UP