来自主页

时间:2017-08-03 21:16:22

标签: asp.net vb.net events user-controls

我在这个网站上搜索了我需要的东西,但没有一个答案完全符合我的需要。所以这就是交易:

我正在动态地将一个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将被加载到。

谢谢

1 个答案:

答案 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以便道歉。

如果有人知道另一种方法,那么分享会非常感激。

此致