Asp.net 用户控件中的ASPX Webform Linkbutton未触发单击事件

Asp.net 用户控件中的ASPX Webform Linkbutton未触发单击事件,asp.net,events,webforms,delegates,Asp.net,Events,Webforms,Delegates,我读过很多关于同一类问题的帖子,我研究了很多解决方案,但我仍然无法解决我的问题 我有一个母版页和一个嵌套用户控件的default.aspx 默认值。aspx: <%@ Register TagPrefix="uc" TagName="MenuSideUserControl" Src="~/Controls/MenuSide.ascx" %> <asp:Content ID="BodyContent" ContentPlaceHolderID="MainCont

我读过很多关于同一类问题的帖子,我研究了很多解决方案,但我仍然无法解决我的问题

我有一个母版页和一个嵌套用户控件的default.aspx

默认值。aspx

    <%@ Register TagPrefix="uc" TagName="MenuSideUserControl" Src="~/Controls/MenuSide.ascx" %>

    <asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">

        <div class="row">
        </div>
        <div class="row">
            <div id="sideMenu">
                <uc:MenuSideUserControl runat="server" ID="wkfMenuSide">
                </uc:MenuSideUserControl>
            </div>
            <div id="remoteContent">
            </div>
        </div>

    </asp:Content>
MenuSide.ascx:

 Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load

        AddHandler wkfMenuSide.UserControlLinkClick, AddressOf MenuSide_UserControlLinkClick

    End Sub

 Protected Sub MenuSide_UserControlLinkClick(sender As Object, e As EventArgs)

        Dim parentId = CType(sender, LinkButton).CommandArgument
        _menuSide.BuildSideMenu(_dao.GetMenuItems(_userID, parentId))

    End Sub
<%@ Control Language="vb" AutoEventWireup="false" CodeBehind="MenuSide.ascx.vb" Inherits="IntranetWKF.MenuSide" %>
<div class="col-sm-2" style="padding-left: 0;">
    <div runat="server" class="panel-group" id="accordion" ClientIDMode="Static">
    </div>
</div>
我使用事件和委托,并将委托绑定到
链接按钮

在default.aspx页面_Load中(我也在OnInit事件中尝试过),我绑定了一个从未触发的点击处理方法,这就是我在没有解决方案的情况下转身的地方

那些
LinkButton
必须在单击后重新构建嵌套的菜单


最后的目标是像ajax一样更新菜单和内容。

一般来说,我建议使用javascript/jquery和ajax,而不是服务器控制。作为第一步,我是否可以建议在ascx控件中使用中继器以不手动添加控件?你能解释一下“menuSide”吗?我认为你的方法是错误的。您可以尝试将所有代码移动到您的控件中。用户也可以是一个控件属性。@Emanuele谢谢你关于转发器的建议,但是我对菜单元素有太多的条件,无法创建一个简单的转发器架构。menuSide是menuSide类的一个实例,用于访问BuildSideMenu子菜单/void。这可能是错误的。这将是WKFMENUSIDE根据我关于委托的代码是正确的。问题是您每次都在创建控件结构。首先,尝试用占位符控件替换div accordion。然后我建议使用树状视图或菜单控件)。我准备换一个你建议的PlcaHolder。但我不能使用树状视图或菜单控件,因为我对css有很大的限制,我必须保持面板引导,就像。我想我会继续使用ajax/jQuery解决方案,但出于我自己的文化,我希望采用.NET服务器方式。我一直在使用MVC,多年来没有练习过webform,我记得为什么。
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

 BuildSideMenu(_dao.GetMenuItems(0, 3))

End Sub

Public Sub BuildSideMenu(sideMenuItems As IList(Of WkfMenuItem))

        Dim pnlDefault As HtmlGenericControl
        Dim pnlHeading As HtmlGenericControl
        Dim pnlTitle As HtmlGenericControl
        Dim linklist As HtmlGenericControl
        Dim link As LinkButton
        Dim lastRegroupement = String.Empty

        For Each m As WkfMenuItem In sideMenuItems

            pnlDefault = New HtmlGenericControl
            With pnlDefault
                .TagName = "div"
                .Attributes("class") = "panel panel-default"
            End With
       [...]                 
                link = New LinkButton
                With link
                    .Text = m.libelle
                End With
                If Not String.IsNullOrEmpty(m.url) Then : link.PostBackUrl = m.url
                Else
                    With link
                        .CommandArgument = m.id
                        .CommandName = "parentId"
                        .ClientIDMode = ClientIDMode.Static
                        .Attributes("data-parentid") = m.id
                    End With
                    AddHandler link.Click, AddressOf LinkButtonClicked
                End If

                pnlTitle.Controls.Add(link)
                pnlHeading.Controls.Add(pnlTitle)
                pnlDefault.Controls.Add(pnlHeading)
                accordion.Controls.Add(pnlDefault)

            End If
        Next

    End Sub    

    Public Event UserControlLinkClick As EventHandler

    Protected Sub LinkButtonClicked(sender As Object, e As EventArgs)
        RaiseEvent UserControlLinkClick(Me, e)
    End Sub