J'ai du mal à comprendre CommandName
et CommandArgument
associés à un lien Link ASP.NET. J'ai lu cet article - http://msdn.Microsoft.com/en-us/library/system.web.ui.webcontrols.button.commandname.aspx et d'autres questions sur ce site.
Je suppose que mes questions sont - qu'est-ce qu'une "Commande" exactement? Un CommandName
peut-il être n'importe quel texte? Je vois "Trier" et "Soumettre" comme exemples. Et quant à CommandArgument
, il est juste utilisé pour spécifier davantage le type de "Command". Correct? Merci beaucoup pour votre aide.
Un Command
peut être tout ce que vous voulez qu'il soit.
L'idée de base est que si vous dites avoir un répéteur, et dans ce répéteur vous avez plusieurs options, vous pouvez donner à chaque option un CommandName
différent. Le CommandArgument
serait alors basé sur l'identifiant unique de la ligne.
Ensuite, dans le post-back, vous pouvez vérifier quel CommandName
a été tiré et en fonction de cela, utilisez la valeur dans le CommandArgument
Par exemple, la majoration pourrait ressembler à quelque chose comme ...
<asp:Repeater runat="server" id="myRepeater">
<ItemTemplate>
<div>
<asp:LinkButton runat="server" id="lnkEdit" CommandName="edit"
CommandArgument="<%#Container.DataItem.Id%>" Text="Edit"
OnClick="OnClickHandler" />
<asp:LinkButton runat="server" id="lnkDelete" CommandName="delete"
CommandArgument="<%#Container.DataItem.Id%>" Text="Delete"
OnClick="OnClickHandler" />
</div>
</ItemTemplate>
</asp:Repeater>
Ensuite, votre gestionnaire de post-pack pourrait vérifier lequel a été cliqué ...
Protected Sub OnClickHandler(ByVal sender As Object, ByVal e As EventArgs)
Dim lnk as LinkButton = CType(sender,LinkButton)
Select Case lnk.CommandName
Case "edit"
EditItem(lnk.CommandArgument)
Case "delete"
DeleteItem(lnk.CommandArgument)
End Select
End Sub
CommandName
peut être n'importe quelle chaîne oui. Mais attention! ASP.NET traitera certaines chaînes de manière spéciale. Par exemple si vous avez un contrôle Button dans une colonne GridView
avec un CommandName
de "delete" "il déclenchera l'événement OnDeleting
et le CommandArgument
aura été défini sur l'index de ligne du GridViewRow
dans lequel se trouve le bouton. Sinon, comme d'autres l'ont publié, vous pouvez utiliser les CommandName
et CommandArgument
conviennent cependant le mieux à votre situation.
en général, vous définissez CommandArgument
comme l'index de ligne du conteneur parent du contrôle lors de la liaison, et le CommandName
comme quelque chose de significatif pour votre domaine d'application, tel que "UpdateFoo". Vous l'utilisez ensuite dans le gestionnaire d'événements OnRowCommand pour déterminer le bouton sur lequel vous avez cliqué et, par conséquent, la logique métier à exécuter.
CommandName
est ce que vous faites réellement lorsque l'événement est déclenché et le CommandArgument
et bien sûr est l'argument lié au processus. Cela a plus de sens si vous utilisez des boutons de lien dans le répéteur ou des éléments de liste similaires. Dans ce cas, votre CommandName
peut être "Supprimer", "Modifier", "Publier" et pour ce processus, vous devez savoir quel enregistrement vous traitez et "CommandArgument" est votre homme dans ce cas, vous pouvez affecter il l'ID ou les données séparées par des virgules à traiter.
Bien sûr, vous pouvez également l'utiliser pour fusionner des événements similaires. "Trier" en est un excellent exemple, car vous pouvez donner "CommandArgument" comme "Prix asc", "Date asc", "Date desc", tous vos boutons de lien déclenchent l'événement.
Comme le dit Freefaller, CommandName
et CommandArgument
ne sont que des valeurs de chaîne.
La raison pour laquelle il y a plusieurs fois, cependant, un événement de clic déclenchera simplement le clic d'un bouton et vous gérerez ce (s) bouton (s) spécifiquement.
Un bon exemple de l'utilisation des boutons de commande est d'imaginer que vous avez des lignes de données, chaque ligne a la possibilité de visualiser, modifier ou supprimer.
Plutôt que de coder séparément pour chacun, vous pouvez utiliser les parties Command
et avoir chaque ligne le CommandArgument
de l'ID d'enregistrement et le CommandArgument
pour être l'action que vous souhaitez effectuer; ViewRec,
EditRec and
DelRec` par exemple:
protect void cmd_Command(object sender, CommandEventArgs e)
{
// Example, Redirect to page with action
response.redirect(string.format("~/record.aspx?id={0}&action={1}", e.commandArgument, e.CommandName);
}
En utilisant cet exemple comme concept, montre que vous n'avez alors qu'une seule section de code pour gérer plusieurs options et donc un seul endroit pour maintenir etc ...