2

呃,这让我发疯

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

我一辈子都无法触发 BullettedLists onclick 事件。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");
}
4

1 回答 1

6

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

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

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

当您在模式下使用BulletedList控件时,您的值是您要导航到的 URL。因此,您的静态页面 HTML 控件将用作标记的属性。HyperLinkListItemListItem.Valuehref<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除了设置为的 之外,其他一切都相同LinkButton。当我使用它时,bullet_Click当我单击列表项时会触发我的事件处理程序。

我希望这有帮助!!

于 2010-08-16T19:41:28.760 回答