ASP.NET LinkButtonに関連付けられたCommandName
とCommandArgument
を理解するのに問題があります。この記事を読んだ- http://msdn.Microsoft.com/en-us/library/system.web.ui.webcontrols.button.commandname.aspx およびこのサイトの他の質問。
私の質問は-「コマンド」とは何ですか? CommandName
は基本的に任意のテキストにできますか?例として「ソート」と「送信」が表示されます。 CommandArgument
に関しては、これは単に「コマンド」のタイプをさらに指定するために使用されます。正しい?ご協力ありがとうございます。
Command
には任意の名前を指定できます。
基本的な考え方は、リピーターがあり、そのリピーターに複数のオプションがある場合、各オプションに異なるCommandName
を指定できるということです。 CommandArgument
は、行の一意の識別子に基づいています。
その後、ポストバックで、どのCommandName
が起動されたかに基づいて、それに基づいてCommandArgument
の値を使用できます。
たとえば、マークアップは次のようになります。
<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>
その後、パック後のハンドラーがクリックされたものを確認できます...
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
には任意の文字列yesを指定できます。 ただし、ASP.NETは特定の文字列を特別な方法で処理します。たとえば、GridView
列にCommandName
が「delete」のButtonコントロールがある場合"OnDeleting
イベントを発生させ、CommandArgument
はボタンが含まれるGridViewRow
の行インデックスに設定されます。そうでない場合は、他のユーザーが投稿したように使用できますただし、CommandName
とCommandArgument
は状況に最適です。
通常、バインド中にCommandArgument
をコントロールの親コンテナの行インデックスに設定し、CommandName
を「UpdateFoo」など、アプリケーションドメインにとって意味のあるものに設定します。次に、OnRowCommandイベントハンドラーでこれを使用して、クリックされたボタン、したがって実行するビジネスロジックを決定します。
CommandName
は、イベントがトリガーされたときに実際に行うことであり、CommandArgument
はもちろん、プロセスに関連する引数です。リピーターまたは同様のリストアイテムでリンクボタンを使用すると、より意味があります。その場合、CommandName
を「削除」、「編集」、「公開」することができ、このプロセスでは、どのレコードを扱っているかを知る必要があり、この場合「CommandArgument」はあなたが割り当てることができます処理するIDまたはコンマ区切りデータ。
もちろん、これを使用して同様のイベントをマージすることもできます。「ソート」は、「コマンド引数」を「価格asc」、「日付asc」、「日付desc」として指定できるため、すべてのリンクボタンがイベントをトリガーします。
Freefallerが言うように、CommandName
とCommandArgument
は両方とも単なる文字列値です。
なぜ多くのフォールドが発生するのかという理由は、クリックイベントがボタンのクリックを発生させるだけで、そのボタンを具体的に処理するためです。
CommandButtonsの使用の良い例は、データの行があり、各行に表示、編集、または削除の機能があることを想像してください。
それぞれ個別にコードを作成するのではなく、Command
パーツを使用して、各行にレコードIDのCommandArgument
と、希望するアクションにするCommandArgument
を持たせることができます。実行する; ViewRec,
EditRec and
DelRec`たとえば:
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);
}
この例を概念として使用すると、複数のオプションを処理するコードのセクションが1つしかないため、保守する場所が1つだけであることがわかります。