繁体   English   中英

我如何将我的OnItemDataBound C#代码放在我的代码后面,并将其绑定到asp:repeater

[英]How can I put my OnItemDataBound c# code in my code behind and bind it to the asp:repeater

我是asp.net的初学者,这是我第一次遇到asp中继器。 这是我要绑定到C#代码的.ascx页面中的转发器控件

在.ascx页面中:

<asp:Repeater ID="relatedFilesRepeater" runat="server" OnItemDataBound="RelatedFilesRepeater_ItemDataBound">
      <ItemTemplate>
            <tr>
                <td width="30%">
                       <asp:Label ID="fileNameLabel" runat="server" />
                 </td>
                 <td>
                       <asp:ImageButton ID="signatureButton" runat="server" ImageUrl="~/Images/Icons/16x16/_Base Image/Symbol Check 2.png" />
                  </td>
             </tr>
       </ItemTemplate>
</asp:Repeater>

在.ascx页面的顶部,我已经用C#声明了OnItemDatabound函数,如下所示:

<script language="C#" runat="server">
     void RelatedFilesRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
...
}

而且效果很好。 但是将c#代码放在.ascx中并不美观,也不干净,我该如何在代码中放置OnItemDataBound函数并将其与asp中继器绑定。 因为我试图简单地将c#代码复制粘贴到文件后面的代码中,所以它不起作用。

之所以无法访问标签控件,是因为它位于转发器内部。 因此,为了访问它们,您可以使用FindControl()

var myLabel = (Label)FindControl("YouLabelId");
//Do Some Work

这将适用于<asp:Repeater />的其余控件

在这里进一步阅读

您不能直接访问这些标签。 原因是它们被包装在转发器中,所以首先您必须找到相应的转发器行,然后使用row.findcontrol并提供ctrl id:

 void RelatedFilesRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
Label fileNameLabel= (Label)e.Item.FindControl("fileNameLabel");
ImageButton signatureButton= (ImageButton)e.Item.FindControl("signatureButton");
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM