从gridviewrowcommand中的commandparameter获取实体对象

本文关键字:实体 对象 获取 commandparameter gridviewrowcommand 中的 | 更新日期: 2023-09-27 18:12:09

我正在使用绑定到List<Customer>GridView。当RowCommand被某些按钮触发时,我希望能够从e.CommandArgument检索当前行的Customer对象,如下所示:

protected void GridView_RowCommand(object sender, GridViewCommandEventArgs e)
{
    Customer customer = (Customer)e.CommandArgument;
    DoSomething(customer);
}

如何在事件被触发之前将Customer对象分配给CommandArgument ?

从gridviewrowcommand中的commandparameter获取实体对象

我不确定你是否真的可以在CommandArgument中存储一个复杂的对象,因为它似乎只接受字符串或数字值。

一些我从未真正付诸实践的东西,是将您的对象转换为Json字符串并将其用作命令参数。

例如,使用Newtonsoft。Json和一个名为FooBar的虚拟对象

<asp:Button ID="btnOne" runat="server" 
CommandName="Click" 
CommandArgument='<%#Newtonsoft.Json.JsonConvert.SerializeObject((FooBar)Container.DataItem) %>' 
Text="Click" />

当你处理gridviewrowcommand点击事件时,你可以从commandparameter中反序列化对象

FooBar fooBar = Newtonsoft.Json.JsonConvert.DeserializeObject<FooBar>(e.CommandArgument.ToString());

现在这是工作,但是否是最好的解决方案,我不确定。