18

ASP.NETLinkBut​​tonの理解CommandNameと関連付けに問題があります。CommandArgumentこの記事を読みました-http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.button.commandname.aspxおよびこのサイトの他の質問。

私の質問は-「コマンド」とは正確には何ですか?CommandName基本的にどんなテキストでもかまいませんか?例として「並べ替え」と「送信」があります。そしてCommandArgument、これは「コマンド」のタイプをさらに指定するために使用されます。正しい?どうもありがとうございました。

4

4 に答える 4

30

ACommandはあなたが望むものなら何でもかまいません。

基本的な考え方は、リピーターがあると言い、そのリピーターに複数のオプションがある場合、各オプションに異なるを与えることができるということ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
于 2012-11-13T15:02:54.363 に答える
5

CommandNameはい、任意の文字列にすることができます。しかし、注意してください!ASP.NETは、特定の文字列を特別な方法で処理します。たとえば、「削除」のGridView列にボタンコントロールがある場合、イベントが発生し、ボタンが含まれているの行インデックスに設定されます。それ以外の場合は、他のユーザーが投稿したように、とを使用できます。ただし、状況に最も適しています。CommandNameOnDeletingCommandArgumentGridViewRowCommandNameCommandArgument

通常、をCommandArgumentバインド中のコントロールの親コンテナの行インデックスに設定しCommandName、「UpdateFoo」などのアプリケーションドメインにとって意味のあるものに設定します。次に、これをOnRowCommandイベントハンドラーで使用して、クリックされたボタンを判別し、実行するビジネスロジックを判別します。

于 2012-11-13T15:59:22.520 に答える
2

CommandNameこれは、イベントがトリガーされたときに実際に行うことでCommandArgumentあり、もちろん、プロセスに関連する引数です。リピーターまたは同様のリストアイテムでリンクボタンを使用する方が理にかなっています。その場合、CommandName「削除」、「編集」、「公開」にすることができます。このプロセスでは、処理しているレコードを知る必要があります。この場合、「CommandArgument」がユーザーであり、IDまたはカンマ区切りで割り当てることができます。処理するデータ。

もちろん、これを使用して同様のイベントをマージすることもできます。「Sort」は、「CommandArgument」を「Price asc」、「Date asc」、「Date desc」として指定できるため、この良い例です。すべてのリンクボタンがイベントをトリガーします。

于 2012-11-13T15:09:47.733 に答える
0

freefallerが言うように、CommandNameとは両方ともCommandArgument単なる文字列値です。

理由は何倍もありますが、クリックイベントはボタンのクリックを起動するだけで、そのボタンを具体的に処理します。

CommandButtonの使用の良い例は、データの行があり、各行に表示、編集、または削除する機能があることを想像してみてください。

それぞれを個別にコード化するのではなく、Commandパーツを使用して、各行CommandArgumentにレコードIDのを持たせCommandArgument、実行したいアクションにすることができます。ViewRec,EditRec andDelRec`例:

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つしかないことがわかります。

于 2012-11-13T15:10:26.873 に答える