2

顧客のリストを持つリピーターがあります。各顧客に対して、リンクの削除ボタンがあります。linkbutton の一部として、次のように Customer オブジェクトをコマンド引数に渡します (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

私の意見では、この場合の最良の方法は次のとおりです。

  • からIDを取得しますCommandArgument
  • 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 に答える