首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Aspx传递参数

从Aspx传递参数
EN

Stack Overflow用户
提问于 2012-07-13 00:37:02
回答 1查看 104关注 0票数 0

因此,我有一个用数据填充的表,但是我想知道如何从一行中传递两位数据,这取决于单击了行尾的哪个link

代码语言:javascript
复制
<%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 %>,而不是传回值。做这件事的最好方法是什么?我也在考虑使用;

代码语言:javascript
复制
<asp:HiddenField ID="hiddenIsCaptchaReadyValidate" runat="server" Value=false/>

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-13 00:40:35

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

我可以建议您使用<asp:Repeater>控件,而不是在ASPX中使用for循环吗?这还允许您从代码隐藏中设置CommandAttribute值。

举个例子。

代码语言:javascript
复制
<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中或者在后台加载代码...

代码语言:javascript
复制
receipts.DataSource = GetReceipts();
receipts.DataBind();

然后..。

代码语言:javascript
复制
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函数的情况下执行以下操作……

代码语言:javascript
复制
 <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)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11456505

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档