繁体   English   中英

在runat =“server”之后仍然无法访问Asp.net div

[英]Asp.net div still not accessible after runat=“server”

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

<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属性,但您可以从代码隐藏(例如LabelLiteralControl)向其添加控件。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM