0

我有一个带有母版页的简单网站。要为内容页面上的元素(例如Textbox)设置属性,我使用 CSS。在设计器中它运行良好,但是当我启动一个网站时,一种样式不适用于控件。原因很简单。要说,我有一个TextBoxwith id="TextBox1"in content 页面,它是放在ContentPlaceHolder1. 在 CSS 文件中,我为具有 id 的对象设置属性#TextBox1。当我由于母版页名称修改而启动网站时,它会获得一个 ID ,该 IDctl00_ContentPlaceHolder1_TextBox1未在母版页中包含的 CSS 文件中定义。

这个问题的正确解决方案是什么?硬编码损坏的名称似乎并不好。

4

3 回答 3

2

CssClass在控件上 使用,像这样: CssClass="myClass",然后在你的样式表中而不是这样:

#TextBox1 { /* styles */ }

你会有这个:

.myClass { /* styles */ }

值得注意的是,.Net 4 修复了,或者允许您更好地管理 html 中生成的 ID,详情请参见此处

于 2010-04-11T19:07:58.310 回答
2

正如尼克和 SLaks 所说的那样,课程是最好的。您可以在类属性中分配多个类,它将聚合所有指定类的所有属性,覆盖它与早期类共享的任何属性。css 文件中类定义的顺序设置了它们被应用的顺序。

<style type="text/css">
.genericTextBox
{
background-color: #eee;
color: black;
}
.textbox1
{
background-color: #3ee;
font-size: larger;
}
</style>

<asp:TextBox id="textBox1" CssClass="textbox1 genericTextBox" runat="server"></asp:TextBox>

应用样式的顺序首先是 genericTextBox,因为它是样式中第一个定义的(基本上类中的顺序被忽略)。它设置颜色和背景颜色,然后应用样式 textbox1 并覆盖背景颜色并添加字体大小。所以最后你以generictextbox的颜色,textbox1的背景颜色和字体大小结束。

编辑:在 TextBox 上将类更改为 CssClass

于 2010-04-11T19:32:45.400 回答
1

最简单的解决方案是使用类名(不会被破坏)而不是 ID 来应用您的 CSS 规则。

正确的解决方案是使用该ClientID属性,该属性返回损坏的 ID。

例如:

.Something #<%=TextBox1.ClientID %>` {
    color: red;
}

但是,您只能对内联样式表执行此操作。

于 2010-04-11T19:02:09.953 回答