2010-08-16 9 views
2

Ugh, ça me rend fouBulletedList onClick pas de tir

Im essayant de construire un menu dynamique d'un BulletedList, la plupart des éléments de menu sont des liens simples mais le bouton de déconnexion doit exécuter un code de nettoyage.

Je ne peux pas me permettre de lancer l'événement BullettedLists onclick. Le BulletedList est dans un contrôle utilisateur (si cela fait une différence)

Des idées? Ou - des idées pour une alternative, une meilleure solution?

code ci-dessous

BulletedList

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

Ajout d'un élément

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

gestionnaire Cliquez

protected void menu_Click(object sender, BulletedListEventArgs e) 
{ 

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

Répondre

6

Vous utilisez le mauvais DisplayMode fo r votre contrôle BulletedList. Vous devez utiliser un DisplayMode de LinkButton. Lorsque vous utilisez DisplayMode.HyperLink:

Les utilisateurs peuvent cliquer sur les liens pour passer à une autre page . Vous devez fournir une URL cible en tant que propriété Value de éléments individuels.

Ceci provient du MSDN docs pour ce contrôle. (Il est environ 3/4 du chemin en bas de la page.)

Lorsque vous utilisez un contrôle BulletedList en mode HyperLink, la valeur de votre ListItem est l'URL que vous vous dirigez vers. Ainsi, vos contrôles HTML de page statique utilisent ListItem.Value comme attribut href de la balise <a>.

Voici ce que le balisage HTML ressemble lorsque vous utilisez un DisplayMode de HyperLink (c'est une balise d'ancrage simple vieux HTML w/a href):

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

Mais puisque vous voulez postback, vous devez définir la DisplayMode de votre BulletedList contrôle à LinkButton. Lorsque vous faites cela, vous allez activer une publication sur votre page et votre gestionnaire d'événements interceptera l'événement. Vous pouvez ensuite traiter le clic de manière appropriée puis. L'argument d'événement transmis (de type BulletedListEventArgs) aura une propriété Index, et vous indiquera quel élément de votre liste a été cliqué.

Voici le code .aspx mis à jour que je:

<asp:BulletedList ID="bullet" runat="server" DisplayMode="LinkButton" 
    onclick="bullet_Click"> 
    <asp:ListItem Text="One" Value="1">One</asp:ListItem> 
</asp:BulletedList> 

Tout le reste est le même, sauf le DisplayMode, qui est réglé sur LinkButton. Lorsque j'utilise cela, mon gestionnaire d'événements bullet_Click est déclenché lorsque je clique sur un élément de la liste.

J'espère que cela aide !!

+0

Oui, ça l'a fait. Merci. Je vais continuer à essayer de trouver une autre solution plus flexible, je ne suis pas sûr que je veux tous ces post-retour se passe sur les liens AUTRES – Keeno

+1

Qu'est-ce que vous essayez de faire sur la publication des autres liens? Vous pouvez envisager certaines fonctionnalités AJAX et potentiellement utiliser un framework comme jQuery. Il est très facile de créer une liste dynamique et de gérer les événements avec. Faites le moi savoir et je peux ajouter un exemple. –

+0

hey, Ajax est exactement ce que j'ai fait à la fin, en utilisant toujours la bulletedList (avec des liens hypertexte), puis j'ai ajouté un attribut onclick à l'un des éléments. L'onclick a alors déclenché un appel ajax. Merci encore :) – Keeno