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