在Repeater链接按钮中将对象作为CommandArguement传递

时间:2012-09-19 11:08:44

标签: c# asp.net repeater linkbutton commandargument

我有一个带有客户列表的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是不够的。我在网上看到了关于将逗号分隔的值列表传递到命令参数中的示例,但希望避免这样做。这可能吗?

有什么想法吗? 感谢

2 个答案:

答案 0 :(得分:4)

在我看来,这种情况的最佳方式是:

  • CommandArgument
  • 获取ID
  • 通过ID获取客户
  • 删除客户实体

使用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 serializationBase64 encode结果。 然而,这些都是可怕的解决方案!

你需要的是重新思考你是如何做到这一点的。我保证有一种更简单的方法。