我正在使用绑定到GridView
的List<Customer>
。当通过某些按钮触发RowCommand
时,我希望能够从Customer
检索当前行的e.CommandArgument
对象,如下所示:
protected void GridView_RowCommand(object sender, GridViewCommandEventArgs e)
{
Customer customer = (Customer)e.CommandArgument;
DoSomething(customer);
}
如何在事件触发前将
Customer
对象分配给CommandArgument
? 最佳答案
我不确定您实际上是否可以在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 click事件时,可以从CommandArgument中反序列化对象
FooBar fooBar = Newtonsoft.Json.JsonConvert.DeserializeObject<FooBar>(e.CommandArgument.ToString());
现在这行得通,但是我不确定这是否是最佳解决方案。