添加runat =“server”会更改布局的行为

时间:2009-05-22 13:06:19

标签: asp.net css layout html

我有一个包含一些控件,用户控件等的页面。

当我将div从普通<div id="foo">更改为<div id="foo" runat="server">时 布局完全改变。

为什么会这样,我该如何预防?

我正在使用2.0 .NET框架

是因为.NET改变了我的身份证明,这显然是我不想要的吗?

3 个答案:

答案 0 :(得分:13)

如果您在CSS中定位div控件的ID,然后在服务器上运行控件,您会发现它不再应用该样式。

这是因为ASP.NET有一个内置机制(INamingContainer)来确保你没有多个名为相同的控件。它通过添加容器前缀来实现此目的,因此最终得到:

<div id="ctl00_ctl00_myDivName" runat="server" />

最简单的方法是将其从处理ID转变为处理类:

<div class="myDiv" runat="server"></div>

或者,我认为XHTML要求Div具有结束标记,因此请使用

<div runat="server">Some content</div>

答案 1 :(得分:0)

当您将runat =“server”添加到div时,系统会自动为其生成ID。它被称为ID mangling。不幸的是,在我认识的div的2.0框架中你没有太多可以做的事情(无论如何都没有痛苦),但是在4.0中我们得到了一个覆盖...虽然在自定义控件上(在2.0中) )您可以覆盖ClientID和UniqueID字段。因此,如果您创建了一个使用div作为基础的MyDiv类,然后创建了ClientID / UniqueID字段,那么您应该没问题。

您的另一个选择是更新您的CSS / javascript以使用损坏的ID。它基于页面中的位置是相当静态的,因为ASP.Net在回发期间使用它来查找控件。

答案 2 :(得分:0)

添加 ClientMode =“static”这将确保您的ID不会更改为您的控件的clientside ID。