18

我无法理解CommandNameCommandArgument关联 ASP.NET LinkBut​​ton。我已阅读这篇文章 - 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列中有一个 Button 控件,CommandName它将引发OnDeleting事件,并且CommandArgument将被设置GridViewRow为该按钮所在的行索引。否则,正如其他人发布的那样,您可以使用CommandNameandCommandArgument但最适合您的情况。

通常,您将CommandArgument在绑定期间将 设置为控件父容器的行索引,并将 设置CommandName为对您的应用程序域有意义的内容,例如“UpdateFoo”。然后,您在 OnRowCommand 事件处理程序中使用它来确定单击了哪个按钮,从而确定要执行什么业务逻辑。

于 2012-11-13T15:59:22.520 回答
2

CommandName是触发事件时您实际执行的操作,CommandArgument并且当然是与流程相关的参数。如果您在转发器或类似列表项中使用链接按钮,则更有意义。在这种情况下,您CommandName可以是“删除”、“编辑”、“发布”,对于此过程,您需要知道您正在处理的记录和“CommandArgument”是您的人在这种情况下,您可以为其分配 ID 或逗号分隔要处理的数据。

当然,您也可以使用它来合并相似的事件“排序”是一个很好的例子,因为您可以将“CommandArgument”作为“价格升序”、“日期升序”、“日期降序”所有链接按钮触发事件。

于 2012-11-13T15:09:47.733 回答
0

正如 freefaller 所说,CommandNameCommandArgument都只是字符串值。

很多折叠的原因是单击事件只会触发按钮的单击,并且您会专门处理该按钮。

使用命令按钮的一个很好的例子是想象你有几行数据,每一行都有查看、编辑或删除的能力。

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);
}

使用这个例子作为一个概念,表明你只有一段代码来处理多个选项,因此只有一个地方需要维护等等......

于 2012-11-13T15:10:26.873 回答