2

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

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

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

4

1 回答 1

2

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

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

例如,使用 Newtonsoft.Json 和一个名为FooBar

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

然后当你处理 GridView RowCommand 点击事件时,你可以从 CommandArgument 反序列化对象

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

现在这可行,但我不确定它是否是最好的解决方案。

于 2013-05-03T09:22:25.430 回答