找不到使用FindControl方法的ASP.Net表

本文关键字:ASP Net 方法 FindControl 找不到 | 更新日期: 2024-09-21 05:24:28

如何使用FindControl方法找到ASP.Net表控件?

  if (Convert.ToInt32(Session["Persons"]) == 1)
            {
                HtmlTable tt = (HtmlTable)panel1.FindControl("singleTbl");
                tt.Visible = true;
            }



<asp:UpdatePanel ID="panel1" runat="server" UpdateMode="Conditional">
<Triggers>
    <asp:AsyncPostBackTrigger ControlID="btn_serch" EventName="Click" />
</Triggers>
<ContentTemplate>
    <div id="div_result" runat="server" style="display:none" class="divsearchresult">
        <table width="750">
 <asp:DataList ID="dtlRoomsPrice" Visible="false" orizontalAlign="center" runat="server"
ShowFooter="False" ShowHeader="False" Width="700px" OnItemDataBound="dtlRoomsDetails_ItemDataBound">
<ItemTemplate>
<table border="0" id="singleTbl" width="90" align="left" runat="server" style="visibility:hidden;">
</table>
</ItemTemplate>
    </table>
    </div>
    </asp:UpdatePanel>

找不到使用FindControl方法的ASP.Net表

您的代码有一些问题,

首先,不能将ASP.Net控件强制转换为HTML控件,反之亦然

所以你的表是HTML控件,你需要把它转换成HtmlControl,比如:

 HtmlControl tt = (HtmlControl)FindControl("singleTbl"); 
    tt.Visible = true; 

第二,您设计了一个没有任何trtd的表HTML标记,因此将其更改为:

<table border="0" id="singleTbl" width="90" align="left" runat="server" style= "display:none;">
        <tr>
            <td></td>
        </tr>
    </table>

建议使用display而不是visibility,因为display:none;隐藏了一个元素,它不会占用任何空间,所以您可以尝试如下:

   HtmlControl tt = (HtmlControl)FindControl("singleTbl");
        tt.Style.Add("display", "block");
        //tt.Attributes["visibility"] = "visible";
        //tt.Attributes["display"] = "block";
        //tt.Visable = true;

或者你应该在DataListItemDataBound事件中这样做:

HtmlControl tt = (HtmlControl)e.Item.FindControl("singleTbl");
tt.Style.Add("display", "block");

方法"FindControl"搜索容器下的一级控件。也许您的表在回发后是动态插入的,或者它在其他控件(如Panel或UpdatePanel)下。

首先,您的表是HTML表,所以singleTbl是HtmlTable而不是Table。如果您希望它是Table类,则必须使用<asp:Table>标记。第二点,您的标签<contenttemplate>未关闭。

最后一点,我提到了FindControl sheaches只在控件的直接子级中。

您必须向第一个div和表添加runat服务器和Id

然后在你的代码中:

 var div= Panel1.FindControl("divID") as HtmlGenericControl;
 var firstTable=div.FindControl("firstTableID") as HtmlTable;
 var dataList=firstTable.findControl("dtlRoomsPrice") as DataList;
 var tbl=dataList.FindControl("singleTbl") as HtmlTable;