CommandEventArgs
是 .NET 中常用于 Web 应用(特别是 ASP.NET Web Forms) 中控件命令事件处理的类,常配合像 Button
, LinkButton
, Repeater
, GridView
, DataList
等控件的 Command
事件使用。
🧩 命名空间与继承结构
// 命名空间
System.Web.UI.WebControls
// 继承结构
object
└── EventArgs
└── CommandEventArgs
🧠 基本用途
当你使用 ASP.NET Web 控件(如 Button、LinkButton)时,可以通过设置 CommandName
和 CommandArgument
来携带信息;在事件处理器中,就可以通过 CommandEventArgs
对象来读取这些值:
<asp:LinkButton ID="lnkDelete" runat="server"
CommandName="DeleteItem"
CommandArgument='<%# Eval("ProductID") %>'
OnCommand="HandleCommand">删除</asp:LinkButton>
对应的后台代码:
protected void HandleCommand(object sender, CommandEventArgs e)
{
if (e.CommandName == "DeleteItem")
{
string productId = e.CommandArgument.ToString();
// 删除产品逻辑
}
}
🔧 属性详解
属性名 | 类型 | 说明 |
---|---|---|
CommandName | string | 控件传递的命令名称,常用于区分不同操作,如 “Edit”, “Delete”, “Select” 等。 |
CommandArgument | object | 携带的附加参数,常用来传递行 ID、索引、关键值等。 |
✅ 常见场景
✅ 示例 1:GridView 行命令处理
<asp:GridView ID="gvData" runat="server" OnRowCommand="gvData_RowCommand" ...>
<Columns>
<asp:ButtonField ButtonType="Button" Text="查看" CommandName="ViewDetail" />
</Columns>
</asp:GridView>
protected void gvData_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "ViewDetail")
{
int rowIndex = Convert.ToInt32(e.CommandArgument);
// 执行查看详情操作
}
}
注意:GridViewCommandEventArgs
继承自 CommandEventArgs
,还提供了如 RowIndex
, CommandSource
等额外信息。
🔁 派生类关系
派生类 | 用途 |
---|---|
GridViewCommandEventArgs | GridView 控件特有 |
DataListCommandEventArgs | DataList 控件特有 |
DetailsViewCommandEventArgs | DetailsView 控件特有 |
FormViewCommandEventArgs | FormView 控件特有 |
这些子类通常在它们的专属控件中用于 ItemCommand
/ RowCommand
等事件处理。
🧪 自定义控件使用 CommandEventArgs
如果你编写自定义控件,也可以手动触发类似事件:
// 假设你在自定义控件内部
CommandEventArgs args = new CommandEventArgs("MyCommand", "ArgValue");
OnCommand(args); // 自定义事件触发
📝 小结
优势 | 描述 |
---|---|
统一事件模型 | Command + CommandName/Argument 适用于各种控件 |
灵活性高 | 可以通过 CommandArgument 传递任意信息 |
支持多种控件 | GridView、Repeater、DataList 等都使用它 |
发表回复