BulletedList onClick未触发

时间:2010-08-16 16:50:09

标签: c# events webforms bulletedlist

是的,这让我发疯了

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

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

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

以下代码

的BulletedList

<asp:BulletedList OnClick="menu_Click" runat="server" CssClass="MainMenu" ID="loggedInMenu" DisplayMode="HyperLink"  />  

添加元素

loggedInMenu.Items.Add(new ListItem("Logout", ""));

点击处理程序

protected void menu_Click(object sender, BulletedListEventArgs e)
{

    user.logout();
    Response.Redirect("Default.aspx");
}

1 个答案:

答案 0 :(得分:6)

您对DisplayMode控件使用了错误的BulletedList。您应该使用DisplayMode LinkButton。当您使用DisplayMode.HyperLink

  

用户可以点击要移动的链接   另一页。你必须提供一个   将URL作为Value属性   个别项目。

这是来自MSDN docs的控件。 (它大约是页面下方的3/4。)

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

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

<li><a href="1">One</a></li>

但是,既然你想要回发,你应该将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>
除了设置为DisplayMode的{​​{1}}之外,其他所有内容都相同。当我使用它时,单击列表项时会触发LinkButton事件处理程序。

我希望这会有所帮助!!