繁体   English   中英

LinkBut​​ton CommandName和CommandArgument

[英]LinkButton CommandName and CommandArgument

我无法理解与ASP.NET LinkBut​​ton关联的CommandNameCommandArgument 我已经阅读了这篇文章 - http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.button.commandname.aspx以及本网站上的其他问题。

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

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

CommandName可以是任何字符串yes。 但要小心! ASP.NET将以特殊方式处理某些字符串。 例如,如果GridView列中的Button控件具有CommandName为“delete”,则它将引发OnDeleting事件,并且CommandArgument将被设置为该按钮所在的GridViewRow的行索引。否则,正如其他人发布的那样您可以使用CommandNameCommandArgument但最适合您的情况。

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

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

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

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

之所以有很多折叠,但点击事件只会点击一个按钮,你就会专门处理这个按钮。

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

而不是每一个seperately代码,你可以使用Command的部分,具有每行有CommandArgument记录ID,而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);
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM