我的 HTML 中有一个div
元素。我为元素添加了一个id
和runat
属性:
<div id="footer" runat="server">
渲染后,查看 HTML 显示:
<div id="ctl00_footer">
但是,我无法从页面的 .aspx.cs 代码访问它:
footer.InnerHtml += "test";
如何从 C# 代码访问该元素?
我的 HTML 中有一个div
元素。我为元素添加了一个id
和runat
属性:
<div id="footer" runat="server">
渲染后,查看 HTML 显示:
<div id="ctl00_footer">
但是,我无法从页面的 .aspx.cs 代码访问它:
footer.InnerHtml += "test";
如何从 C# 代码访问该元素?
您可以使用 FindControl("footer"),并将其转换为 HtmlGenericControl。
HtmlGenericControl footer = (HtmlGenericControl)FindControl("footer")
原因之一可能是您没有该页面的设计器文件。所以你不能通过它访问元素ID
。
只需添加名称为[您的页面名称].aspx.designer.cs 的类,打开它,删除所有代码,保存它,转到您的视图并单击保存 - 设计器必须从您的视图中生成所有元素的代码。在此之后,您可以通过 访问元素ID
。
<div id="footer" runat="server"></div>
访问您正在做的方式应该没有问题。奇怪的是,我生成的标记保持 div id 不变为footer
.
确保您没有任何编译错误,并且您可以访问在您尝试访问此 div 的同一范围内运行服务器端的其他元素。
您需要将页面或控件的 ClientIDMode 属性设置为静态:
http://msdn.microsoft.com/en-us/library/system.web.ui.control.clientidmode.aspx
这将防止“ctl00_”被附加到导致您出现问题的 ID 上。
I have encountered this problem before. You may have the target div inside another div that does not have the runat="server"
attribute. All nested divs should have the runat
attribute in order to be able to access the inner elements.
<div id="divContainer" runat="Server">
<div id="yourDiv" runat="Server">
</div>
如果您要编写 ASP.NET 代码并且想要从服务器端访问控件,那么您也可以使用提供的控件。
使用Panel而不是 Div。无论如何,ASP:Panel 控件在生成的 html 中呈现为 div。Panel 没有 .Text 属性,但您可以从代码隐藏中添加控件(例如Label或LiteralControl。
我遇到了同样的问题,发现由于“复制”和“粘贴”,我的函数有一个“静态”声明。将其删除,因为静态函数无法访问非静态标识符并且已修复。
页面创建时是否有可能被复制/粘贴?如果是这样,请绝对确保所有对旧页面的引用都更改为新页面的名称。我之前在 ASPX 页面顶部的代码以及设计器页面的名称空间中完成了此操作。
我有同样的问题。我的解决方案是为 div 元素设置“ID”而不是“id”(即原因是外壳)。