簡體   English   中英

在Repeater鏈接按鈕中將對象作為CommandArguement傳遞

[英]Pass object as CommandArguement in a Repeater Link Button

我有一個帶有客戶列表的中繼器。 針對每個客戶都有一個刪除鏈接按鈕。 作為鏈接按鈕的一部分,我要將客戶對象傳遞給命令參數,如下所示(其中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不夠。 我在網上看到了一些示例,這些示例將逗號分隔的值列表傳遞到命令參數中,但要避免這樣做。 這可能嗎?

有任何想法嗎? 謝謝

我認為這種情況的最佳方法是:

  • 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") %>'

您在這里遇到的問題是中繼器必須轉換為HTML。 因此,您受限於元素屬性中的規范所允許的限制。

在服務器端, CommandArgument始終是一個字符串,因此您無法完成編碼后的操作。

現在...您可以實施一些技巧來解決此問題,例如上述CSV,或者可以使用二進制序列化Base64編碼結果。 但是,這些都是可怕的解決方案!

您需要重新考慮自己的操作方式。 我保證有一個更簡單的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM