2

うーん、これは私を怒らせている

bulletedListから動的メニューを作成しようとしていますが、ほとんどのメニュー項目はプレーンリンクですが、ログアウトボタンでクリーンアップコードを実行する必要があります。

BullettedListsonclickイベントを起動することはできません。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");
}
4

1 に答える 1

6

あなたはDisplayModeあなたのBulletedListコントロールに間違ったものを使っています。のを使用する必要がDisplayModeありLinkButtonます。使用する場合DisplayMode.HyperLink

ユーザーはリンクをクリックして別のページに移動できます。個々のアイテムのValueプロパティとしてターゲットURLを指定する必要があります。

これは、このコントロールのMSDNドキュメントからのものです。(ページの約3/4です。)

モードでBulletedListコントロールを使用する場合、yourの値はナビゲート先のURLです。したがって、静的ページのHTMLコントロールはタグの属性として使用されます。HyperLinkListItemListItem.Valuehref<a>

HyperLinkのDisplayModeを使用した場合のHTMLマークアップは次のようになります(これは、href付きの単純な古いHTMLアンカータグです)。

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

ただし、ポストバックするため、コントロールのをに設定する必要がDisplayModeあります。これを行うと、ページへのポストバックが有効になり、イベントハンドラーがイベントをトラップします。その後、クリックを適切に処理できます。(タイプの)渡されたイベント引数にはプロパティがあり、リスト内のどのアイテムがクリックされたかがわかります。BulletedListLinkButtonBulletedListEventArgsIndex

これが私が使用した更新された.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 に答える