我的页面上有一个ASP:Label控件,我想给它一些CSS格式。我知道我可以给它一个CssClass名称,但是,它似乎是错误的,因为我想给它一个特定的定位,因此我正在寻找更类似于html元素的常规“id”属性的东西。
标签的ID是ASP使用的标签,但在生成的实际html中,我得到了不同的ID。
有什么建议吗? 感谢。
答案 0 :(得分:2)
ASP.Net的下一个版本将更容易为控件指定确切的clientID。目前,您有几种方法可以解决此问题:
内联样式
<asp:Label runat="server" ID="MyLabel" style="..." />
<强>的CssClass 强>
正如您在问题中提到的那样,只需使用css类。如果必须的话,没有什么能阻止你制作那些独特的东西。
编写处理程序以提供样式表
编写样式表时,请将占位符保留在客户端ID的文件中。然后使用http处理程序替换每个请求的实际呈现ID。这并不是很简单,因为样式表请求与html页面请求是分开的,但它肯定是可能的,因此值得一提。
使用容器
由于标签呈现为span标记,如果该范围在特定命名容器中是唯一的,您可以这样选择:
<div id="MyContainer"><asp:Label ID="MyLable" runat="server" /></div>
在你的样式表中:
#MyContainer span { /*...*/ }
使用容器+类
如果容器不够具体,您可以使用该类将其缩小到该容器中:
<div id="MyContainer"><asp:Label ID="MyLable" runat="server" CssClass="MyClass"/></div>
并在你的样式表中:
#MyContainer span.MyClass { /*...*/ }
答案 1 :(得分:1)
ASP.net实质上打破了CSS ID选择器。为了解决这个问题,我有时会将此ID放在CssClass属性中。
<style type="text/css">
input.first-name { /* style me */ }
</style>
<asp:TextBox runat="server" ID="firstName" CssClass="first-name" />
您还可以在CssClass属性中添加多个类名
<style type="text/css">
input.first-name { /* style me */ }
input.text-input { /* because ie 6 won't do input[type=text] */ }
</style>
<asp:TextBox runat="server" ID="firstName" CssClass="first-name text-input" />
我尽量尝试不使用内联样式或使用控件提供的其他样式属性。
答案 2 :(得分:1)
您唯一的选择是使用CssClass或内联样式。由于ASP.NET自动生成服务器端控件的ID,因此您永远不应该尝试再猜测它们是什么。让Webforms使用优雅的CSS布局可能是一件很大的痛苦。
ASP.NET 4.0将引入ClientID属性,以便将来更容易使用ID属性。
答案 3 :(得分:0)
我认为你可以这样做:
<asp:Label ID+"lblID" style=" [whatever style you want goes in here "] runat="server />
请记住,当控件被渲染时,它会像ctrl.etc ....
一样呈现或者如果您正在进行定位,则无法将标签包裹在<div>
答案 4 :(得分:0)
是的 - 网络表单令人头痛 - 标识由标签(或其他控件)所在的所有内容部分,面板等组成。
你最好的选择是将CssClass添加到控件中。