2011-06-23 2 views
0

Je travaille sur un projet ASP.NET/C# et j'ai un contrôle GridView. L'une des colonnes est un TemplateField/ItemTemplate avec un ImageButton à l'intérieur. Pendant l'événement OnClick, je rends un panneau visible. Lorsque vous le faites avec un ImageButton normal, la page est rechargée et le panneau est visible. Cela ne se produit pas avec mon ImageButton à l'intérieur de la GridView. Est-ce que quelqu'un sait comment je peux le faire, ou pourquoi c'est le cas?Différence dans OnClick pour ImageButton dans un ImageButton GridView par rapport à ImageButton standard

Merci de votre temps, s'il vous plaît laissez-moi savoir si vous avez des questions.

est ici la définition asp pertinente

<asp:TemplateField ItemStyle-Width="90px" ItemStyle-VerticalAlign ="Bottom" ItemStyle-HorizontalAlign ="Center" HeaderText="Add Alias"> 
       <HeaderStyle Font-Bold="True" Font-Size="11px" VerticalAlign="Bottom"/> 
        <ItemTemplate> 
         <asp:ImageButton ID ="btnAddAliasHeader" runat="server" ImageUrl="~/img/AddAlias.gif" onclick="btnAddAlias_Click" /> 
       </ItemTemplate> 
       </asp:TemplateField> 

Et voici le C# pour la fonction OnClick. J'ai ajouté l'événement OnRowCommand et j'ai rendu le panneau visible à cet endroit, mais il n'apparaît toujours pas. Je pense que cela peut avoir quelque chose à voir avec la publication, parce que si je clique ensuite sur le bouton en dehors de la grille, sur le rechargement, alors le panneau du bouton à l'intérieur de la grille s'affiche bien. Edit: Je suis un idiot et a laissé de côté que tout cela se passe dans un panneau de mise à jour.

+0

Montrez-nous du code. –

+0

Est-ce que 'GridView' et' Panel' sont tous deux dans le même 'UpdatePanel'? – pseudocoder

Répondre

0

Les boutons/images dans un conteneur tel qu'un gridview (listview, répéteur, etc.) voient leur événement click grillé jusqu'au conteneur lui-même. Pour rendre le panneau visible, vous devez utiliser les propriétés du nom de la commande et l'argument de commande sur le bouton, puis utilisez l'événement OnRowCommand du gridview à dispay le panneau

HTH

+0

J'ai ajouté l'événement OnRowCommand et j'ai rendu le panneau visible, mais il n'apparaît toujours pas. Je pense que cela peut avoir quelque chose à voir avec la publication, parce que si je clique ensuite sur le bouton en dehors de la grille, sur le rechargement, alors le panneau du bouton à l'intérieur de la grille s'affiche bien. – Nick

+0

@Nick: Comme pseudocodeur mentionné dans leur commentaire sur la question initiale, la grille de vue et le panneau sont-ils tous les deux dans le même panneau de mise à jour? sinon, vous devrez ajouter un déclencheur au panneau de mise à jour qui contient le panneau que vous souhaitez afficher. – Yiangos

0

Je supposant que votre événement ISN 't tiring - vous devez utiliser l'attribut commandname sur le bouton image - et le ramasser sur la commande onrow du gridview - ou enregistrer votre événement imagebutton click dans l'événement onrowcreated.

0

Si la publication n'est pas nécessaire. Désolé si j'ai mal compris la question. Vous pouvez au lieu d'utiliser un bouton d'image (contrôle du serveur), utiliser un lien ou une image régulière enveloppé dans un tag et jQuery. Cela empêchera la publication sur le serveur. J'espère que cela t'aides.

<a href="#" id="viewPanel">Click to View Panel</a> 

$("#<%=viewPanel.ClientID%>").click(function(e) 
{ 
    e.preventDefault(); 
    $("#id_of_panel").show(); 

}); 

Hope this helps.

+0

Il ne demandait pas d'éviter une publication ou d'exécuter le code côté client ...? – pseudocoder

+0

@pseudocoder - Il a ajouté du code après avoir lu la question. Il a également dit qu'il voulait rendre un panneau visible. Je lui donnais une alternative si aucun traitement sur le serveur n'était nécessaire. – webtrifusion

1

Button s, ImageButton s et LinkButton s ne tirent pas Click événements quand ils sont dans un modèle de contrôle comme vous décrivez. (Edit: sauf s'il est utilisé avec la propriété OnClick du contrôle) Au lieu de cela, le contrôle conteneur déclenche un événement, dans le cas du GridView, il s'agit d'un événement RowCommand.Utilisez les CommandName et CommandArgument propriétés de votre bouton pour déterminer l'action appropriée à prendre dans le gestionnaire d'événements comme indiqué ci-dessous:

Markup:

<asp:LinkButton ID="LinkButton1" runat="server" CommandName="DoStuff" CommandArgument='<%# Eval("RecordID") %>' Text="DoStuff"></asp:LinkButton> 

code:

Protected Sub GridView1_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles GridView1.RowCommand 
    If e.CommandName = "DoStuff" Then 
     'Do something with e.CommandArgument' 
    End If 
End Sub 
+0

Ils tirent leurs événements cependant, je peux marcher à travers le débogueur à l'endroit où ils se produisent. La façon dont la publication fonctionne-t-elle différemment pour un ImageButton dans un Gridview? – Nick

0

Vous pouvez utilisateur sur commande Événement pour gridview plutôt que d'utiliser Onclick sur le contrôle perticular seulement vous devez passer commandname du contrôle et le vérifier par e.commandname et faire ce que vous voulez faire