2

我有一个带有客户列表的中继器。针对每个客户都有一个删除链接按钮。作为链接按钮的一部分,我想将客户对象传递给命令参数,如下所示(其中 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 是不够的。我在网上看到了有关将逗号分隔的值列表传递到命令参数中的示例,但希望避免这样做。这可能吗?

有任何想法吗?谢谢

4

2 回答 2

6

在我看来,这种情况下最好的方法是:

  • 从中获取 IDCommandArgument
  • 通过 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") %>'
于 2012-09-19T12:20:01.860 回答
2

您在这里遇到的问题是您的转发器必须被翻译成 HTML。因此,您受限于元素属性中规范所允许的限制。

在服务器端CommandArgument将始终是一个字符串,所以你不能做你想做的事,因为你有它编码。

现在......您可以实施一些技巧来解决这个问题,例如前面提到的 CSV,或者您可以使用二进制序列化Base64 编码结果。然而,这些都是可怕的解决方案!

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

于 2012-09-19T11:18:05.033 回答