![](/img/trans.png)
[英]Dynamically added LinkButton CommandName/CommandArgument settings being dropped
[英]LinkButton CommandName and CommandArgument
我无法理解与ASP.NET LinkButton关联的CommandName
和CommandArgument
。 我已经阅读了这篇文章 - 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
的行索引。否则,正如其他人发布的那样您可以使用CommandName
和CommandArgument
但最适合您的情况。
通常,您将CommandArgument
设置为绑定期间控件的父容器的行索引,并将CommandName
设置为对应用程序域有意义的内容,例如“UpdateFoo”。 然后,您可以在OnRowCommand事件处理程序中使用它来确定单击了哪个按钮,从而确定要执行的业务逻辑。
CommandName
是您在触发事件时实际执行的操作, CommandArgument
当然是与进程相关的参数。 如果在转发器或类似列表项中使用链接按钮,则更有意义。 在这种情况下,你的CommandName
可以是“删除”,“编辑”,“发布”,对于这个过程,你需要知道你正在处理哪条记录,'CommandArgument'是你的男人,在这种情况下,你可以为它分配ID或逗号将数据分开处理。
当然你也可以使用它来合并类似的事件“Sort”是一个很好的例子,因为你可以将'CommandArgument'作为“Price asc”,“Date asc”,“Date desc”所有链接按钮触发事件。
正如freefaller所说, CommandName
和CommandArgument
都只是字符串值。
之所以有很多折叠,但点击事件只会点击一个按钮,你就会专门处理这个按钮。
使用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.