Repeater上的Findcontrol无法找到控制权

时间:2016-11-30 11:49:21

标签: html asp.net

我尝试动态地将点击事件添加到转发器项目中的表格,下面是服务器端代码。但是,Findcontrol无法在项目中找到控件......我做错了什么?

    rownr = 0;
    foreach (RepeaterItem ri in Lijst.Items)
    {
        string targ = "javascript:return GoAanvraag(" + rownr.ToString() + ");";
        Table tb1 = ((Table) ri.FindControl("ItemTabel"));
        tb1.Attributes.Add("onclick", targ);

        rownr++;
    }

转发器代码是:

<asp:Repeater ID="Lijst" runat="server" DataSourceID="SqlDataSource2"
        OnItemDataBound="Lijst_ItemDataBound" 
>
<HeaderTemplate>
</HeaderTemplate>
   <SeparatorTemplate>
        <hr />
    </SeparatorTemplate>
<ItemTemplate>

<table ID="ItemTabel" style="width:100%">
<tr>

  <td style="width:100%">
        <asp:Label ID="Regel" runat="server"></asp:Label>
  </td>
  <td style="width:100%">
        <asp:Label ID="Plancode" runat="server" font-size="20px" align=right></asp:Label>
  </td>
  <asp:Button ID="btnGoAanvraag" runat="server" visible="false"/>
</tr>

</table>
</ItemTemplate>    
<FooterTemplate>
</FooterTemplate>
</asp:Repeater>

1 个答案:

答案 0 :(得分:2)

这里有很多事情。

首先,您的表不是服务器端控件。要使其成为一个,请添加runat属性:

<table ID="ItemTabel" style="width:100%" runat="server">

也就是说,处理表本身的点击是很奇怪的。你真的是指桌子里面的任何控件吗?

其次,目前尚不清楚何时运行此代码。这必须在ItemDataBound事件中或之后,与之前一样,项目模板中的控件不存在。如果它在ItemDataBound中,则没有理由迭代所有行。每行/每个项目都会引发一次ItemDataBound,并且您在事件参数中有一个项目引用,因此您只能更新该项目。