我有一个带有客户列表的Repeater。针对每个客户,有一个删除链接按钮。作为linkbutton的一部分,我想将Customer对象传递给Command Arguement,如下所示(其中Container.DataItem是客户对象):
<asp:LinkButton ID="lnkDelete"
OnClientClick="return confirmDelete();"
OnClick="Customer_OnDelete"
CommandArgument="<%# Container.DataItem %>"
CommandName="Delete"
runat="server"></asp:LinkButton>
当我这样做时:
var button = (((LinkButton) sender));
var customer= button.CommandArgument;
button.CommandArguement是一个字符串。我需要所有的对象属性,因为我们使用Nhibernate所以一切都需要设置,删除记录的ID是不够的。我在网上看到了关于将逗号分隔的值列表传递到命令参数中的示例,但希望避免这样做。这可能吗?
有什么想法吗? 感谢
答案 0 :(得分:4)
在我看来,这种情况的最佳方式是:
CommandArgument
使用Repeater
活动OnItemCommand
。此活动包含RepeaterCommandEventArgs
。你不能以这种方式获得CommandArgument
:
protected void myRepeater_ItemCommand(object source, RepeaterCommandEventArgs e)
{
int customerID= Convert.ToInt32(e.CommandArgument.ToString());
}
在asp:LinkButton
代码处使用:
CommandArgument='<%# DataBinder.Eval(Container.DataItem, "ID") %>'
答案 1 :(得分:1)
您遇到的问题是转发器必须转换为HTML。因此,您受限于元素属性中规范允许的限制。
在服务器端CommandArgument
将始终是一个字符串,因此您无法按照编码的方式执行所需操作。
现在......你可以通过几种黑客来解决这个问题,比如前面提到的CSV,或者你可以使用binary serialization和Base64 encode结果。 然而,这些都是可怕的解决方案!
你需要的是重新思考你是如何做到这一点的。我保证有一种更简单的方法。