CommandEventArgs 是 .NET 中常用于 Web 应用(特别是 ASP.NET Web Forms) 中控件命令事件处理的类,常配合像 ButtonLinkButtonRepeaterGridViewDataList 等控件的 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();
        // 删除产品逻辑
    }
}

🔧 属性详解

属性名类型说明
CommandNamestring控件传递的命令名称,常用于区分不同操作,如 “Edit”, “Delete”, “Select” 等。
CommandArgumentobject携带的附加参数,常用来传递行 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,还提供了如 RowIndexCommandSource 等额外信息。


🔁 派生类关系

派生类用途
GridViewCommandEventArgsGridView 控件特有
DataListCommandEventArgsDataList 控件特有
DetailsViewCommandEventArgsDetailsView 控件特有
FormViewCommandEventArgsFormView 控件特有

这些子类通常在它们的专属控件中用于 ItemCommand / RowCommand 等事件处理。


🧪 自定义控件使用 CommandEventArgs

如果你编写自定义控件,也可以手动触发类似事件:

// 假设你在自定义控件内部
CommandEventArgs args = new CommandEventArgs("MyCommand", "ArgValue");
OnCommand(args);  // 自定义事件触发

📝 小结

优势描述
统一事件模型Command + CommandName/Argument 适用于各种控件
灵活性高可以通过 CommandArgument 传递任意信息
支持多种控件GridView、Repeater、DataList 等都使用它