我有一个包含一些控件,用户控件等的页面。
当我将div从普通<div id="foo">
更改为<div id="foo" runat="server">
时
布局完全改变。
为什么会这样,我该如何预防?
我正在使用2.0 .NET框架
是因为.NET改变了我的身份证明,这显然是我不想要的吗?
答案 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。