[英]Asp.net div still not accessible after runat=“server”
我的HTML中有一个div
元素。 我在元素中添加了id
和runat
属性:
<div id="footer" runat="server">
渲染后,查看HTML显示:
<div id="ctl00_footer">
但是,我无法从页面的.aspx.cs代码访问它:
footer.InnerHtml += "test";
如何从C#代码访问该元素?
您可以使用FindControl(“页脚”),并将其强制转换为HtmlGenericControl。
HtmlGenericControl footer = (HtmlGenericControl)FindControl("footer")
其中一个原因可能是您没有该页面的设计器文件。 所以你不能通过它的ID
访问元素。
只需添加名称为[您的页面名称] .aspx.designer.cs的类 ,打开它,删除所有代码,保存它,转到您的视图并单击保存 - 设计者必须从您的视图中生成所有元素的代码。 在此之后,您可以按ID
访问元素。
访问<div id="footer" runat="server"></div>
应该没有问题。 奇怪的是,我生成的标记使div id保持不变为footer
。
确保您没有任何编译错误,并且您可以在尝试访问此div的同一范围内访问运行服务器端的其他元素。
您需要将页面或控件的ClientIDMode属性设置为Static:
http://msdn.microsoft.com/en-us/library/system.web.ui.control.clientidmode.aspx
这样可以防止“ctl00_”被附加到导致问题的ID上。
我之前遇到过这个问题。 您可能将目标div放在另一个没有runat="server"
属性的div中。 所有嵌套的div都应该具有runat
属性,以便能够访问内部元素。
<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'(即外壳是原因)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.