我无法理解为什么这有用。我有一个名为Main的内容持有者的母版页,我有一个内容页面,其中包含匹配的内容标记。但是,我注意到当页面组合在一起时,我的一些元素的ID会被更改,或者我应该说变态,如下所示:
<input value="fizz-buzz" name="ctl00$Main$options" type="radio" id="Main_foobar"/>
这对我的css造成了严重破坏。请帮忙。
答案 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>