LinkBut​​ton CommandName和CommandArgument

时间:2012-11-13 15:00:35

标签: asp.net linkbutton

我无法理解与ASP.NET LinkBut​​ton相关联的CommandNameCommandArgument。我在这个网站上看过这篇文章 - http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.button.commandname.aspx和其他问题。

我想我的问题是 - 究竟什么是“命令”? CommandName基本上可以是任何文字吗?我将“排序”和“提交”视为示例。至于CommandArgument,这仅用于进一步指定“命令”的类型。正确? 非常感谢你的帮助。

4 个答案:

答案 0 :(得分:28)

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>

然后你的post-pack处理程序可以检查哪个被点击了......

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

答案 1 :(得分:5)

CommandName可以是任何字符串是。 但要注意! ASP.NET将以特殊方式处理某些字符串。例如,如果GridView列中的Button控件具有CommandName“删除”,则会提升{{1 } {}和OnDeleting将被设置为按钮所在的CommandArgument的行索引。否则,正如其他人发布的那样,您可以使用GridViewRow和{{1}但是最适合你的情况。

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

答案 2 :(得分:2)

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

当然你也可以使用它来合并类似的事件“Sort”是一个很好的例子,因为你可以将'CommandArgument'作为“Price asc”,“Date asc”,“Date desc”所有链接按钮触发事件。

答案 3 :(得分:0)

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

之所以有很多折叠,但是点击事件只会触发按钮的点击并且你专门处理那个按钮。

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

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