在runat =" server"之后,Asp.net div仍无法访问

时间:2012-05-31 21:39:59

标签: asp.net

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

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

渲染后,查看HTML显示:

<div id="ctl00_footer">

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

footer.InnerHtml += "test";

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

9 个答案:

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

答案 6 :(得分:0)

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

答案 7 :(得分:0)

我遇到了同样的问题,发现由于&#34;副本&#34;并且&#34;粘贴&#34;我的功能有一个&#34;静态&#34;宣言。 删除它,因为静态函数无法访问非静态标识符并且已修复。

答案 8 :(得分:0)

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