2017-04-07 2 views
1

J'ai un répéteur qui crée des boutons à partir d'éléments sélectionnés sur une liste de cases à cocher. La checkboxlist est une liste de codes d'articles.ASP C# Répéteur Bouton ne passant pas la chaîne à la méthode

Les boutons apparaissent correctement et ont les codes article comme texte. Ça marche.

Lors d'un clic, le bouton doit appeler une méthode en utilisant le code article du bouton pour appeler une méthode qui remplit les données de la page, mais cela ne se produit pas. Je crois que le bouton passe une valeur vide.

Comment faire pour que le bouton du répéteur clique pour transmettre la valeur correcte? La méthode fonctionne avec une zone de texte normale, mais je n'ai pas réussi à l'utiliser avec les boutons du répéteur.

ASPX

` <div style="width: 98%; overflow-x: scroll;"> 
    <asp:Repeater ID="rptItemButtons" 
       runat="server"> 

      <ItemTemplate> 
       <asp:Button ID="btnItemButton" 
        runat="server" 
        Text='<%# Container.DataItem.ToString() %>' 

        CommandArgument='<%# Container.DataItem.ToString() %>' 
        CommandName="repeater_ItemCommand" 
        /> 

      </ItemTemplate> 
      </asp:Repeater> 
    </div>` 

C#

public void repeater_ItemCommand(object sender, CommandEventArgs e) 
    { 
    SaveUserInputsAction();               
    SaveDataAction(); 
    lblTestMessage.Text = e.CommandArgument.ToString(); 
    GetItemDetails(e.CommandArgument.ToString());   GetCostFactors(e.CommandArgument.ToString()); 
    } 
+0

Je pense que vous devez utiliser 'Container.ItemIndex' comme' CommandArgument' au lieu de 'Container.DataItem' – VDWWD

Répondre

1

Essayez de définir la propriété OnItemCommand du Repeater:

ASPX:

<asp:Repeater ID="rptItemButtons" OnItemCommand="Repeater_ItemCommand" runat="server"> 
    <ItemTemplate> 
     <asp:Button ID="btnItemButton" runat="server" 
      Text='<%# Container.DataItem.ToString() %>' 
      CommandArgument='<%# Container.DataItem.ToString() %>' 
     /> 
    </ItemTemplate> 
</asp:Repeater> 

CodeBehind:

public void Repeater_ItemCommand(object sender, RepeaterCommandEventArgs e) 
{ 
    SaveUserInputsAction();               
    SaveDataAction(); 
    lblTestMessage.Text = e.CommandArgument.ToString(); 
    GetItemDetails(e.CommandArgument.ToString()); 
    GetCostFactors(e.CommandArgument.ToString()); 
} 

EDIT Après avoir examiné à nouveau votre code, je remarque que vous spécifiez CommandName="repeater_ItemCommand" sur votre bouton. Il peut effectivement fonctionner si vous changez cela à OnCommand="repeater_ItemCommand". C'est un peu comme spécifier le gestionnaire d'événement sur le Repeater mais cela dépend de vos préférences personnelles.

+1

Cela a résolu le problème! Merci @dana, vous êtes le meilleur, je l'apprécie vraiment. –