我在这个网站上搜索了我需要的东西,但没有一个答案完全符合我的需要。所以这就是交易:
我正在动态地将一个usercontrol加载到aspx页面以及一些像这样的按钮:
Dim uc As UserControl
Dim btns As New List(Of LinkButton)
uc = LoadControl("path_to_ascx")
btns.Add(New LinkButton With {.ID = "btnid", .Text = "Sometext"})
uc.GetType().GetProperty("tblButtons").SetValue(uc, btns, Nothing)
holder2.Controls.Add(uc) 'holder2 is an id of a PlaceHolder
这项工作非常好。按钮按预期显示在页面上。现在我遇到了麻烦,如何告诉这些按钮上升用aspx页面编写的事件,加载用户控件。
Public Sub btnClick(sender As Object, e As EventArgs)
'do stuff
End Sub
为什么我要实现这个目标?因为我有一个非常复杂的UserControl,我希望尽可能多地重用它,但是按钮会在每个aspx页面上执行不同的操作,这个UserControl将被加载到。
谢谢
答案 0 :(得分:0)
我已经解决了我的问题。在UserControl中,我向OnRowCreated事件的每一行添加了动态按钮。
我正在使用我的问题中的按钮将UserControl加载到aspx,我刚刚向我的usercontrol添加了一个ID属性:
Dim uc As UserControl
Dim btns As New List(Of LinkButton)
uc = LoadControl("path_to_ascx")
btns.Add(New LinkButton With {.ID = "btnid", .Text = "Sometext", .CommandName = "cmdName"})
uc.ID = "UserControl1" 'here I added ID property
uc.GetType().GetProperty("tblButtons").SetValue(uc, btns, Nothing)
holder2.Controls.Add(uc) 'holder2 is an id of a PlaceHolder
在我添加一个像这样的EventHanlder之后:
AddHandler TryCast(holder2.FindControl("UserControl1").FindControl("grid"), GridView).RowCommand, AddressOf grid_RowCommand
'grid is the ID of GrdiView in UserControl
以下是用aspx代码编写的gridview rowCommand的事件:
Protected Sub grid_RowCommand(sender As Object, e As GridViewCommandEventArgs)
If e.CommandName = "someCmdName" Then
'do stuff
Else
'do somthing else
End If
End Sub
也许我的问题还不够好,因为我没有提到,我将把按钮加载到rowCreated事件的gridview行并将它们连接到RowCommand以便道歉。
如果有人知道另一种方法,那么分享会非常感激。
此致