为什么在使用母版页时我的所有元素都被重命名?

时间:2010-12-28 07:34:52

标签: asp.net master-pages

我无法理解为什么这有用。我有一个名为Main的内容持有者的母版页,我有一个内容页面,其中包含匹配的内容标记。但是,我注意到当页面组合在一起时,我的一些元素的ID会被更改,或者我应该说变态,如下所示:

<input value="fizz-buzz" name="ctl00$Main$options" type="radio" id="Main_foobar"/>

这对我的css造成了严重破坏。请帮忙。

4 个答案:

答案 0 :(得分:9)

这是为了确保来自不同来源的多个ID始终具有唯一名称。

在ASP.NET 4.0中,您可以将ClientIDMode设置为static,并且不会重命名控件。

答案 1 :(得分:1)

这是ASP.net中的事情(直到3.5)。这是为了避免重复的ID和添加到不同内容占位符的控件名称。

在ASP.net 4.0中,您可以控制控件ID的生成方式。

答案 2 :(得分:1)

当您需要自定义ASP.net控件的样式时,请始终设置其CssClass属性并在样式表中引用它,即使该控件是唯一的。班级名称永远不会改变。

答案 3 :(得分:1)

如果你坚持使用3.5并且无法升级到4.0,我只是在我已经使用多年的codeplex上提出了一个解决方案。

http://awesomeclientid.codeplex.com/

几天前才上传它,但基本上它将你指定的所有控件序列化到HTML doc上的Json数组,以便在JavaScript中使用。

我在这里写了一篇关于它的快速帖子:

http://www.philliphaydon.com/2010/12/i-love-clean-client-ids-especially-with-net-2-0/

您可以注册HTTPModule,也可以在逐页的基础上对PreRenderComplete上的页面进行实例化和序列化,您最终会得到的是您的文档中的JavaScript块:

<script type=”text/javascript”>
//<![CDATA[
var controls = {
"txtUserName": "ctl00_ContentPlaceHolder1_txtUserName",
"txtEmail": "ctl00_ContentPlaceHolder1_txtEmail",
"btnSubmit": "ctl00_ContentPlaceHolder1_btnSubmit"
};
//]]>
</script>

然后当你编写JavaScript时,你可以这样做:

<script type=”text/javascript”>
//<![CDATA[
var element = document.getElementById(controls.btnSubmit);
//]]>
</script>