ASP.NET ユーザーコントロール(ascx)内のイベントを親側で検知する
例えばユーザーコントロールの中にボタンがあり、そのボタンがクリックされたときに組み込み元の親コントロール側の処理を実行したい場合があります。
いろいろと方法はありますが、ユーザーコントロール側でイベントをPublicで宣言する方法がわかりやすいです。
以下のようなユーザーコントロールがあるとします。
UserControl1.ascx<asp:Button ID="Button1" runat="server" />ボタンのクリックイベントで、Publicで宣言したイベントを実行します。
UserControl1.ascx.vbPublic Class UserControl1
Inherits System.Web.UI.UserControl
Public Event Button1Click As EventHandler
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
RaiseEvent Button1Click(Me, e)
End Sub
End Class親コントロール側では上記で作成したascxを組み込んでいます。
WebForm1.aspx<uc:UserControl1 ID="UserControl1" runat="server"></uc:UserControl1>以下のように、ユーザーコントロールのイベントとして親コントロール側で処理を実装できます。
WebForm1.aspx.vbProtected Sub UserControl1_Button1Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles UserControl1.Button1Click
'処理を実装
End SubCommandイベントの場合
コマンドイベントでも基本的には方法は同じです。
UserControl1.ascx.vbPublic Class UserControl1
Inherits System.Web.UI.UserControl
Public Event Button2Click As EventHandler
Protected Sub Button2_Click(ByVal sender As Object, ByVal e As CommandEventArgs) Handles Button2.Command
RaiseEvent Button2Click(Me, e)
End Sub
End Classパラメーターeの型はSystem.EventArgsでないとエラーになってしまうので、System.EventArgsで受け取ったあとに、CommandEventArgsに型変換して値を取得します。
WebForm1.aspx.vbProtected Sub UserControl1_Button2Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles UserControl1.Button2Click
'コマンドのパラメーターは型変換して参照できます
Dim args As String = CType(e, CommandEventArgs).CommandArgument.ToString
End Sub