0

linkそのため、データを入力するテーブルがありましたが、行の最後でクリックされたものに応じて、行から2ビットのデータを渡すにはどうすればよいか疑問に思いました。

<%WebReceiptSummary[] receipts = GetReceipts();
          if (receipts != null)
          {
              for (int i = 0; i < receipts.Length; i++)
              {%>
        <tr>
            <td><%= receipts[i].Type%></td>
            <td><%= receipts[i].PolicyNo%></td>
            <td><%= receipts[i].Date%></td>
            <td class="c"><%= receipts[i].Amount%></td>
            <td class="r"><asp:LinkButton OnCommand="PDFLinkClick" 
CommandArgument="<%= receipts[i].PDF %>&<% receipts[i].PolicyNo %>" runat="server">View PDF</asp:LinkButton></td>
        </tr>
        <% }
        }
        %>

明らかに、値ではなくCommandArgument文字列を返すだけ<%= receipts[i].PDF %>&<% receipts[i].PolicyNo %>です。これを行うための最良の方法は何でしょうか?私も使うことを考えていました。

<asp:HiddenField ID="hiddenIsCaptchaReadyValidate" runat="server" Value=false/>

しかし、ここで同じ問題があり、引用符で囲まれています。また、これを行う最も効率的な方法ではない、行ごとにvalue2つ作成する必要があることも意味します。hiddenfields考え?

4

1 に答える 1

1

マークアップを介して追加された場合<%= %>、属性の一部としてコマンドを持つことはできません。

forASPXでループを使用する代わりに、<asp:Repeater>コントロールを使用することをお勧めしますか?CommandAttributeこれにより、分離コードから値を設定することもできます。

例...

<asp:Repeater runat="server" id="receipts" OnItemDataBound="receipts_ItemDataBound">
  <ItemTemplate>
    <tr>
        <td><%#((WebReceiptSummary)Container.DataItem).Type%></td>
        <td><%#((WebReceiptSummary)Container.DataItem).PolicyNo%></td>
        <td><%#((WebReceiptSummary)Container.DataItem).Date%></td>
        <td class="c"><%#((WebReceiptSummary)Container.DataItem).Amount%></td>
        <td class="r"><asp:LinkButton ID="pdfLink" OnCommand="PDFLinkClick" runat="server">View PDF</asp:LinkButton></td>
    </tr>
  </ItemTemplate>
</asp:Repeater>

InitまたはLoadincodebehindで...

receipts.DataSource = GetReceipts();
receipts.DataBind();

それで...

protected void receipts_ItemDataBound(Object sender, RepeaterItemEventArgs e)
{
  ((LinkButton)e.Item.FindControl("pdfLink")).CommandArgument = 
    ((WebReceiptSummary)e.DataItem).PDF + ((WebReceiptSummary)e.DataItem).PolicyNo;
}

アップデート

考えてみると、のコードビハインド設定を使用するのではなく、(まだテストしていませんが)関数を必要とせずに実際に次のことを実行できるとCommandArgument思いますreceipts_ItemDataBound...

 <td class="r"><asp:LinkButton ID="pdfLink" OnCommand="PDFLinkClick" runat="server"
   CommandArgument="<%#((WebReceiptSummary)Container.DataItem).PDF + ((WebReceiptSummary)Container.DataItem).PolicyNo%>"
   >View PDF</asp:LinkButton></td>

更新2

上記の例のすべてのインスタンスはContainer.DataItem、タイトバウンドに変更されています((WebReceiptSummary)Container.DataItem)

于 2012-07-12T16:40:34.860 に答える