J'ai un gridview avec plusieurs lignes, chacune a un bouton Update et j'ai besoin de passer 2 valeurs quand quelqu'un clique sur le bouton Update. En plus de placer les arguments dans CommandArgument séparés par des virgules (archaïque et pas élégant), comment passer plus d'un argument? En tant que note, les valeurs ne peuvent pas être récupérées à partir des contrôles sur la page, donc n'offrent pas de solutions de conception. S'il vous plaît, concentrez-vous sur la question posée. Merci d'avance.Passage de plusieurs arguments via CommandArgument of Button dans Asp.net
Répondre
Après avoir piqué, Kelsey a l'air correct. Il suffit d'utiliser une virgule ou quelque chose et de le diviser lorsque vous voulez le consommer.
a trouvé ceci: http://aspdotnetcodebook.blogspot.com/2008/09/how-to-pass-multiple-values-to.html – sarsnake
Vous pouvez soit le stocker dans la collection gridview datakeys, soit le stocker dans un champ masqué dans la même cellule, soit joindre les valeurs ensemble. C'est la seule façon. Vous ne pouvez pas stocker deux valeurs dans un lien.
Vous pouvez passer des valeurs séparées par des points-virgules en tant qu'argument de commande, puis diviser la chaîne et l'utiliser.
<asp:TemplateField ShowHeader="false">
<ItemTemplate>
<asp:LinkButton ID="lnkCustomize" Text="Customize" CommandName="Customize" CommandArgument='<%#Eval("IdTemplate") + ";" +Eval("EntityId")%>' runat="server">
</asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
à côté serveur
protected void gridview_RowCommand(object sender, GridViewCommandEventArgs e)
{
string[] arg = new string[2];
arg = e.CommandArgument.ToString().Split(';');
Session["IdTemplate"] = arg[0];
Session["IdEntity"] = arg[1];
Response.Redirect("Samplepage.aspx");
}
Hope it helps !!!!
Ce qui précède a fonctionné pour moi. Le seul problème est que vous manquez les paramètres dans le lien ASPX Redirect(). Essayez Response.Redirect ("Samplepage.aspx? IdTemplate =" + Session ["IdTemplate"]. ToString(). Trim() + "& IdEntity =" + Session ["IdEntity"]. ToString(). Trim()); – Fandango68
En tant que pédant, vous n'avez pas besoin du .ToString(). CommandArgument est toujours une chaîne, donc: var argument = ((LinkButton) expéditeur) .CommandArgument.Split (';'); –
Un peu plus élégante de faire la même en ajoutant sur le commentaire ci-dessus ..
<asp:GridView ID="grdParent" runat="server" BackColor="White" BorderColor="#DEDFDE"
AutoGenerateColumns="false"
OnRowDeleting="deleteRow"
GridLines="Vertical">
<asp:BoundField DataField="IdTemplate" HeaderText="IdTemplate" />
<asp:BoundField DataField="EntityId" HeaderText="EntityId" />
<asp:TemplateField ShowHeader="false">
<ItemTemplate>
<asp:LinkButton ID="lnkCustomize" Text="Delete" CommandName="Delete" CommandArgument='<%#Eval("IdTemplate") + ";" +Eval("EntityId")%>' runat="server">
</asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</asp:GridView>
Et sur le côté serveur:
protected void deleteRow(object sender, GridViewDeleteEventArgs e)
{
string IdTemplate= e.Values["IdTemplate"].ToString();
string EntityId = e.Values["EntityId"].ToString();
// Do stuff..
}
Cela ne fonctionne que si vous voulez que les champs IdTemplate et EntityId soient affichés dans votre grille. Les valeurs que vous placez dans CommandArgument ne sont jamais réellement utilisées. – cyberspy
Mon approche utilise la collection d'attributs pour ajouter Données HTML - attributs du code derrière. Ceci est plus en ligne avec jquery et les scripts côté client.
// This would likely be done with findControl in your grid OnItemCreated handler
LinkButton targetBtn = new LinkButton();
// Add attributes
targetBtn.Attributes.Add("data-{your data name here}", value.ToString());
targetBtn.Attributes.Add("data-{your data name 2 here}", value2.ToString());
ensuite récupérer les valeurs à travers la collection d'attributs
string val = targetBtn.Attributes["data-{your data name here}"].ToString();
@ La réponse de Patrick est une bonne idée, et mérite plus de crédit !. Vous pouvez avoir autant d'éléments de données que vous le souhaitez, ils sont tous séparés, et peuvent être utilisés côté client si nécessaire.
Ils peuvent également être ajoutés de manière déclarative plutôt que dans le code. Je viens de faire cela pour un GridView comme celui-ci:
<asp:TemplateField HeaderText="Remind">
<ItemTemplate>
<asp:ImageButton ID="btnEmail"
data-rider-name="<%# ((Result)((GridViewRow) Container).DataItem).Rider %>"
data-rider-email="<%# ((Result)((GridViewRow) Container).DataItem).RiderEmail %>"
CommandName="Email" runat="server" ImageAlign="AbsMiddle" ImageUrl="~/images/email.gif" />
</ItemTemplate>
</asp:TemplateField>
Dans le RowCommand, vous faites ceci:
donc beaucoup plus propre que le piratage toutes les valeurs avec délimiteurs et le déballage à nouveau à la fin. N'oubliez pas de tester/nettoyer toutes les données que vous récupérez de la page, au cas où il a été falsifié!
J'aime cette approche, c'est aussi proche que vous obtiendrez d'avoir les éléments fortement typés, en utilisant des virgules et sous-chaîne pour séparer ce genre d'informations, bien que réalisable, peut devenir un gâchis. Vous devez avoir une connaissance inhérente de ce qu'est chaque partie de l'argument, l'utilisation de conteneurs "data-" est plus sûre et rend le code beaucoup plus lisible. – GJKH
Si vous voulez passer deux valeurs, vous pouvez utiliser cette approche
<asp:LinkButton ID="RemoveFroRole" Text="Remove From Role" runat="server"
CommandName='<%# Eval("UserName") %>' CommandArgument='<%# Eval("RoleName") %>'
OnClick="RemoveFromRole_Click" />
Fondamentalement, je traite {CommmandName, CommandArgument} comme valeur de clé. Définissez les deux à partir du champ de base de données Vous devrez utiliser l'événement OnClick et utiliser l'événement OnCommand
dans ce cas, ce qui, je pense, est plus propre.
- 1. Passage de plusieurs blocs de code comme arguments dans Ruby
- 2. Passage de plusieurs arguments à la fonction C dans Python
- 3. asp.net web-forms commandargument problème
- 4. Authentification via un passage de jeton dans ASP.NET MVC
- 5. ASP.Net propriété LinkButton CommandArgument ignore <%= .. %>
- 6. ASP.net Button OnClick Validation
- 7. Passage rowId de ListView via un bouton
- 8. Comment passer plusieurs arguments à l'aide JQuery.Ajax dans ASP.NET MVC
- 9. Passage de paramètre via notifyTopics dans Struts2?
- 10. plusieurs arguments pour method_missing
- 11. tableau rapide que le passage des arguments dans Matlab
- 12. Arguments d'interface dans ASP.NET MVC
- 13. ASP.Net MVC Passage de plusieurs paramètres à une vue
- 14. Passage de plusieurs valeurs au contrôleur ASP.NET MVC
- 15. Passage de données via Intention et réception
- 16. Passage des arguments de ligne de commande au document LaTeX
- 17. Passage de plusieurs arguments à une fonction de rappel (avec PHP 5.2)
- 18. Propriété « CommandArgument » est WriteOnly
- 19. ASP.NET MVC Passage de données
- 20. Passage de la collection via asmx
- 21. Plusieurs entrées via une variable de session dans ASP.NET
- 22. Fonction avec plusieurs arguments
- 23. Le passage des arguments à un gestionnaire dans app.yaml
- 24. arguments et conditions passage au modèle dans CodeIgniter
- 25. Pourquoi mon CommandArgument est-il vide?
- 26. @selector - Avec plusieurs arguments?
- 27. contrôles Trouver dans répéteur sur CommandArgument
- 28. Passage des arguments facultatifs (... rest) à une autre méthode qui prend des arguments facultatifs dans AS3
- 29. Passage de valeur via une requête paramétrée
- 30. Passage d'arguments à un BroadcastReceiver via un Intention dans Android
La solution «archaïque» d'utilisation d'un délimiteur est parfois la plus simple. – Kelsey
@sarsnake - j'accepterais la réponse de Archana Motagi – fubo