4

我的 HTML 中有一个div元素。我为元素添加了一个idrunat属性:

<div id="footer" runat="server"> 

渲染后,查看 HTML 显示:

<div id="ctl00_footer">

但是,我无法从页面的 .aspx.cs 代码访问它:

footer.InnerHtml += "test";

如何从 C# 代码访问该元素?

4

9 回答 9

4

您可以使用 FindControl("footer"),并将其转换为 HtmlGenericControl。

HtmlGenericControl footer = (HtmlGenericControl)FindControl("footer")
于 2012-05-31T21:46:27.917 回答
2

原因之一可能是您没有该页面的设计器文件。所以你不能通过它访问元素ID

只需添加名称为[您的页面名称].aspx.designer.cs 的类,打开它,删除所有代码,保存它,转到您的视图并单击保存 - 设计器必须从您的视图中生成所有元素的代码。在此之后,您可以通过 访问元素ID

于 2015-01-27T10:01:56.680 回答
1

<div id="footer" runat="server"></div>访问您正在做的方式应该没有问题。奇怪的是,我生成的标记保持 div id 不变为footer.
确保您没有任何编译错误,并且您可以访问在您尝试访问此 div 的同一范围内运行服务器端的其他元素。

于 2012-05-31T21:58:38.923 回答
1

您需要将页面或控件的 ClientIDMode 属性设置为静态:

http://msdn.microsoft.com/en-us/library/system.web.ui.control.clientidmode.aspx

这将防止“ctl00_”被附加到导致您出现问题的 ID 上。

于 2012-05-31T22:15:50.377 回答
1

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>
于 2013-09-16T15:15:44.987 回答
0

如果您要编写 ASP.NET 代码并且想要从服务器端访问控件,那么您也可以使用提供的控件。

使用Panel而不是 Div。无论如何,ASP:Panel 控件在生成的 html 中呈现为 div。Panel 没有 .Text 属性,但您可以从代码隐藏中添加控件(例如LabelLiteralControl

于 2012-05-31T21:42:50.153 回答
0

我遇到了同样的问题,发现由于“复制”和“粘贴”,我的函数有一个“静态”声明。将其删除,因为静态函数无法访问非静态标识符并且已修复。

于 2013-04-18T12:24:33.820 回答
0

页面创建时是否有可能被复制/粘贴?如果是这样,请绝对确保所有对旧页面的引用都更改为新页面的名称。我之前在 ASPX 页面顶部的代码以及设计器页面的名称空间中完成了此操作。

于 2012-08-13T02:32:30.790 回答
0

我有同样的问题。我的解决方案是为 div 元素设置“ID”而不是“id”(即原因是外壳)。

于 2017-02-01T18:01:58.000 回答