从Aspx传递参数

时间:2012-07-12 16:37:02

标签: asp.net

所以我有一个填充数据的表,但我想知道如何从行中传递两位数据,具体取决于单击行末尾的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,这不是最有效的方法。想法?

1 个答案:

答案 0 :(得分:1)

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

我是否可以建议您使用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>

在你的Init或Load in code ...

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)