找不到使用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>
您的代码有一些问题,
首先,不能将ASP.Net
控件强制转换为HTML控件,反之亦然
所以你的表是HTML控件,你需要把它转换成HtmlControl
,比如:
HtmlControl tt = (HtmlControl)FindControl("singleTbl");
tt.Visible = true;
第二,您设计了一个没有任何tr
和td
的表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;
或者你应该在DataList
的ItemDataBound
事件中这样做:
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;