您好我在asp.net页面中有以下代码
<tr id="XYZ" runat = "server">
<td>body</td>
</tr>
我试图将其转换为div span格式
<div class="ui-class" id="XYZ">
<span>body</span>
</div>
在设计器文件中,我将Div id的数据类型从Html Generic更改为
System.Web.UI.HtmlControls.HtmlTableRow XYZ
当我尝试从我的aspx.cs文件访问此ID(XYZ)时,它给我null。 有人可以帮帮我吗?
编辑,因为没有必要指出我试过
<div class="ui-class" id="XYZ" runat="server">
<span>body</span>
</div>
还将数据类型更改回
System.Web.UI.HtmlControls.HtmlGenericControl
但它仍然是一样的。
答案 0 :(得分:0)
您需要添加runat="server"
属性以使其成为服务器控件,以便可以在代码隐藏中使用它。
尝试将runat="server"
添加到div
,如下所示:
<div class="ui-class" id="XYZ" runat="server">
<span>body</span>
</div>
如果没有runat="server"
属性,ASP.NET不会将您的控件视为服务器控件(不会将它们添加到控件树中,序列化到viewstate等),并且赢得了&#39 ; t允许你从代码隐藏中操纵它们(为了简单起见,我忽略了一些例外)。
此外,您的代码实际上并未显示HtmlGenericControl
控件。你需要这个:
protected System.Web.UI.HtmlControls.HtmlGenericControl XYZ;
protected
访问修饰符(或可能是public
)很重要,因为ASPX被编译为一个类,它是从它继承的代码隐藏的子类。代码隐藏通常声明控件,ASPX 实例化它们(基本上它会自动为XYZ = new System.Web.UI.HtmlControls.HtmlGenericControl()
)。 XYZ
的声明和实例化是在后面的代码中访问时使其为非null的原因。
如果您仍然遇到问题,您可能需要验证您的ASPX没有使用XYZ
作为动态控件或在数据绑定控件内部,例如Repeater
,因为这些将以不同方式处理(例如,在OnItemDataBound
处理程序内部。