ASP.NET ユーザーコントロール(ascx)内のイベントを親側で検知する
例えばユーザーコントロールの中にボタンがあり、そのボタンがクリックされたときに組み込み元の親コントロール側の処理を実行したい場合があります。
いろいろと方法はありますが、ユーザーコントロール側でイベントをPublic
で宣言する方法がわかりやすいです。
以下のようなユーザーコントロールがあるとします。
UserControl1.ascx
<asp:Button ID="Button1" runat="server" />
ボタンのクリックイベントで、Public
で宣言したイベントを実行します。
UserControl1.ascx.vb
Public 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.vb
Protected Sub UserControl1_Button1Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles UserControl1.Button1Click
'処理を実装
End Sub
Commandイベントの場合
コマンドイベントでも基本的には方法は同じです。
UserControl1.ascx.vb
Public 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.vb
Protected 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