Asp.net 用户控件中的ASPX Webform Linkbutton未触发单击事件
我读过很多关于同一类问题的帖子,我研究了很多解决方案,但我仍然无法解决我的问题 我有一个母版页和一个嵌套用户控件的default.aspx 默认值。aspx: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
<%@ 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