0

所以我有一个填充数据的表,但我想知道如何从一行中传递两位数据,具体取决于link单击了行尾的哪一个。

<%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/>

但是我在这里遇到了同样的问题,它value被放在引号内,这也意味着我需要hiddenfields永远创建两个行,这不是最有效的方法。想法?

4

1 回答 1

1

通过标记添加时,不能将<%= %>命令作为属性的一部分。

我可以建议for您不要使用 ASPX 中的循环,而是使用<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>

在您的初始化或加载代码中...

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 回答