BulletedList onClick未触发

Kee*_*eno 2 c# events webforms bulletedlist

呃,这让我很生气

我试图从bulletedList建立一个动态菜单,大多数菜单项是普通链接,但注销按钮需要执行一些清理代码.

我不能为我的生活让BullettedLists onclick事件开火.BulletedList位于用户控件内(如果这有所不同)

有任何想法吗?或者 - 任何替代,更好的解决方案的想法?

代码如下

项目符号列表

<asp:BulletedList OnClick="menu_Click" runat="server" CssClass="MainMenu" ID="loggedInMenu" DisplayMode="HyperLink"  />  
Run Code Online (Sandbox Code Playgroud)

添加元素

loggedInMenu.Items.Add(new ListItem("Logout", ""));
Run Code Online (Sandbox Code Playgroud)

单击处理程序

protected void menu_Click(object sender, BulletedListEventArgs e)
{

    user.logout();
    Response.Redirect("Default.aspx");
}
Run Code Online (Sandbox Code Playgroud)

Dav*_*ter 6

你使用了错误DisplayMode的BulletedList控制.您应该使用DisplayMode的LinkButton.当你使用DisplayMode.HyperLink:

用户可以单击链接以移动到另一个页面.您必须提供目标URL作为单个项的Value属性.

这是来自此控件的MSDN文档.(这是页面下方的3/4左右.)

BulletedList在HyperLink模式下使用控件时,您的值ListItem是您要导航到的URL.因此,您的静态页面HTML控件将ListItem.Value用作标记的href属性<a>.

以下是使用HyperLink的DisplayMode时HTML标记的样子(它是带有href的普通旧HTML锚标记):

<li><a href="1">One</a></li>
Run Code Online (Sandbox Code Playgroud)

但是既然你想要回发,你应该将DisplayMode你的BulletedList控件设置为LinkButton.当您这样做时,您将启用回发到您的页面,并且您的事件处理程序将捕获该事件.然后,您可以适当地处理点击.传入的(类型BulletedListEventArgs)事件参数将具有一个Index属性,它将告诉您列表中的哪个项目被单击.

这是我使用的更新的.aspx代码:

<asp:BulletedList ID="bullet" runat="server" DisplayMode="LinkButton"
    onclick="bullet_Click">
    <asp:ListItem Text="One" Value="1">One</asp:ListItem>
</asp:BulletedList>
Run Code Online (Sandbox Code Playgroud)

除了DisplayMode设置为之外的所有其他内容都是相同的LinkButton.当我使用它时,bullet_Click单击列表项时会触发我的事件处理程序.

我希望这有帮助!!