Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 内容页中的CSS和控件名称混乱_Asp.net_Master Pages_Name Mangling - Fatal编程技术网

Asp.net 内容页中的CSS和控件名称混乱

Asp.net 内容页中的CSS和控件名称混乱,asp.net,master-pages,name-mangling,Asp.net,Master Pages,Name Mangling,我有一个带有母版页的简单网站。要为内容页上的元素(如Textbox)设置属性,我使用CSS。在designer中,它工作得很好,但当我启动一个站点时,一种风格并不适用于控件。原因很简单。也就是说,我在内容页中有一个TextBox和id=“TextBox1”,它被放置在contentplaceholder 1中。在CSS文件中,我为id为#TextBox1的对象设置属性。当我由于母版页名称损坏而启动网站时,它会得到一个id,如ctl00\u ContentPlaceHolder1\u TextBo

我有一个带有母版页的简单网站。要为内容页上的元素(如
Textbox
)设置属性,我使用CSS。在designer中,它工作得很好,但当我启动一个站点时,一种风格并不适用于控件。原因很简单。也就是说,我在内容页中有一个
TextBox
id=“TextBox1”
,它被放置在
contentplaceholder 1
中。在CSS文件中,我为id为
#TextBox1
的对象设置属性。当我由于母版页名称损坏而启动网站时,它会得到一个id,如
ctl00\u ContentPlaceHolder1\u TextBox1
,该id未在母版页中包含的CSS文件中定义


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

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

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

例如:

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

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

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

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

例如:

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

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

在控件上使用
CssClass
,如下所示:
CssClass=“myClass”
,然后在样式表中,而不是在以下位置:

#TextBox1 { /* styles */ }
你会有这个:

.myClass { /* styles */ }

值得注意的是,.Net 4修复或允许您更好地管理html中生成的ID。

在控件上使用
CssClass
,如下所示:
CssClass=“myClass”
,然后在样式表中,而不是在以下位置:

#TextBox1 { /* styles */ }
你会有这个:

.myClass { /* styles */ }

值得注意的是,.NET4修复了html中生成的ID,或使您能够更好地管理该ID。

因为Nick和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
{
背景色:#eee;
颜色:黑色;
}
.textbox1
{
背景色:#3ee;
字体大小:较大;
}
应用样式的顺序是第一个genericTextBox,因为它是样式中定义的第一个(基本上忽略类中的顺序)。它设置颜色和背景色,然后应用样式textbox1,并覆盖背景色并向其添加字体大小。因此,最后以generictextbox中的颜色、textbox1中的背景色和字体大小结束


编辑:在文本框中将类更改为CssClass,因为Nick和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
{
背景色:#eee;
颜色:黑色;
}
.textbox1
{
背景色:#3ee;
字体大小:较大;
}
应用样式的顺序是第一个genericTextBox,因为它是样式中定义的第一个(基本上忽略类中的顺序)。它设置颜色和背景色,然后应用样式textbox1,并覆盖背景色并向其添加字体大小。因此,最后以generictextbox中的颜色、textbox1中的背景色和字体大小结束


编辑:在文本框中将类更改为CssClass

这很明显,但我已经为它们使用了类。对于某些控件,我使用类来设置公共属性(例如宽度和高度)和单个控件的ID(例如背景)。因此,在您的解决方案中,我必须进行大量的复制粘贴,才能将公共类的属性放置到新类中,而不是它们的ID。@flashnik-不是这样!您可以这样做:
CssClass=“class1 class2 class3”
只需使用一个空格来分配多个类。如果两个类定义了相同的属性,则列表中的最后一个将获胜。谢谢,现在已经清楚了。我不知道我能在
class=
@flashnik中写几个类-我也没有写过很长时间,非常方便,是吗?:)这很明显,但我已经为它们使用了类。对于某些控件,我使用类来设置公共属性(例如宽度和高度)和单个控件的ID(例如背景)。因此,在您的解决方案中,我必须进行大量的复制粘贴,才能将公共类的属性放置到新类中,而不是它们的ID。@flashnik-不是这样!您可以这样做:
CssClass=“class1 class2 class3”
只需使用一个空格来分配多个类。如果两个类定义了相同的属性,则列表中的最后一个将获胜。谢谢,现在已经清楚了。我不知道我能在
class=
@flashnik中写几个类-我也没有写过很长时间,非常方便,是吗?:)我应该添加什么,以便使用像
VS这样的符号会显示语法错误;这是编辑器中的一个bug。如果你运行这个页面,它就会工作。(仅当CSS是内联的)不,它不是内联的,它在一个单独的文件中。我应该添加什么,以便使用
VS之类的符号显示语法错误;这是编辑器中的一个bug。如果你运行这个页面,它就会工作。(只有在CSS是内联的情况下)不,它不是内联的,它在一个单独的文件中。请努力创建真正的级联样式表文件,因为这个词在首字母缩略词中就是这个意思。听起来你可能太依赖ID选择器了。更多地使用类,更多地使用标记选择器。努力创建真正的级联样式表文件,因为这个词的首字母缩略词就是这个词的意思。听起来