我无法理解与ASP.NET LinkButton相关联的CommandName
和CommandArgument
。我在这个网站上看过这篇文章 - http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.button.commandname.aspx和其他问题。
我想我的问题是 - 究竟什么是“命令”? CommandName
基本上可以是任何文字吗?我将“排序”和“提交”视为示例。至于CommandArgument
,这仅用于进一步指定“命令”的类型。正确?
非常感谢你的帮助。
答案 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所说,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);
}
使用这个例子作为一个概念,表明你只有一段代码来处理多个选项,因此只有一个地方需要维护......