我的HTML中有一个div
元素。我在元素中添加了id
和runat
属性:
<div id="footer" runat="server">
渲染后,查看HTML显示:
<div id="ctl00_footer">
但是,我无法从页面的.aspx.cs代码中访问它:
footer.InnerHtml += "test";
如何从C#代码访问该元素?
答案 0 :(得分:3)
您可以使用FindControl(“页脚”),并将其强制转换为HtmlGenericControl。
HtmlGenericControl footer = (HtmlGenericControl)FindControl("footer")
答案 1 :(得分:2)
其中一个原因可能是您没有该页面的设计器文件。因此,您无法通过ID
访问元素。
只需添加名称为 [您的网页名称] .aspx.designer.cs 的类,打开它,删除所有代码,保存,转到您的视图并点击save - designer必须从您的视图中生成所有元素的代码。在此之后,您可以通过ID
访问元素。
答案 2 :(得分:1)
以您的方式访问<div id="footer" runat="server"></div>
应该没有问题。奇怪的是,我生成的标记使div id保持不变为footer
确保您没有任何编译错误,并且您可以在尝试访问此div的同一范围内访问运行服务器端的其他元素。
答案 3 :(得分:1)
您需要将页面或控件的ClientIDMode属性设置为Static:
http://msdn.microsoft.com/en-us/library/system.web.ui.control.clientidmode.aspx
这样可以防止“ctl00_”被附加到导致问题的ID上。
答案 4 :(得分:1)
之前我遇到过这个问题。您可能将目标div放在另一个没有runat="server"
属性的div中。所有嵌套的div都应该具有runat
属性,以便能够访问内部元素。
<div id="divContainer" runat="Server">
<div id="yourDiv" runat="Server">
</div>
答案 5 :(得分:0)
如果您要编写ASP.NET代码并且想要从服务器端访问控件,那么您也可以使用提供的控件。
使用Panel代替Div。无论如何,ASP:Panel控件在生成的html中呈现为div。 Panel没有.Text属性,但您可以从代码隐藏中添加控件(例如Label或LiteralControl。
答案 6 :(得分:0)
创建页面时是否有可能复制/粘贴页面?如果是这样,请确保对旧页面的所有引用都更改为新页面的名称。我之前在ASPX页面顶部的代码中以及设计器页面的命名空间中完成了这个。
答案 7 :(得分:0)
我遇到了同样的问题,发现由于&#34;副本&#34;并且&#34;粘贴&#34;我的功能有一个&#34;静态&#34;宣言。 删除它,因为静态函数无法访问非静态标识符并且已修复。
答案 8 :(得分:0)
我有同样的问题。 我的解决方案是为div元素设置'ID'而不是'id'(即外壳是原因)。