.skin和.css在ASP.NET中有什么区别?

14

.skin.css 在 asp.net 中的主要区别是什么?

.skin 是 IDE 的新增强功能。我一直在使用 .css.skin 中有哪些功能不在 .css 中呢?

谢谢, saj

3个回答

21
在皮肤文件中,您可以设置ASP.NET控件的属性。
例如:
<asp:TextBox runat="server" Width="200"/>

你的应用程序中所有的文本框控件都将具有宽度为200。

你可以给它一个名称,只有你喜欢的控件才能设置应用皮肤,例如:

<asp:TextBox SkinID="MultiLineTextBox" runat="server" TextMode="MultiLine" Height="240"/>

现在在一个网页中添加文本框控件时,可以将其SkinID设置为"MultiLineTextBox",如下所示:

<asp:TextBox runat="server" SkinID="MultiLineTextBox"/>

因此,它将继承TextMode为MultiLine和Height为240。

要使用皮肤,您需要在App_Themes文件夹下向应用程序添加主题,并在那里添加皮肤文件。现在,要在页面中使用此主题,您必须将页面的EnableTheming属性设置为true,StylesheetTheme或Theme设置为您主题的名称。您也可以在配置文件中设置这些属性。

在aspx页面中设置主题:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication1.WebForm1" EnableTheming="true" StylesheetTheme="Your Theme Name" %>

在web.config中设置主题。

<configuration>
   <system.web>
     <pages styleSheetTheme="Your Theme Name"></pages>
   </system.web>
</configuration>

很好的解释:但是当我尝试使用时,出现了一个错误..错误是..已经指定了SkinID,但页面未配置使用页面主题或样式表主题。如果将以编程方式设置主题或样式表主题,则可以接受此错误。对于.css文件,我们必须从aspx页面中提供链接..当我尝试提供链接时,没有像skin这样的类型..现在我该如何访问.skin文件? - selvaraj
我更新了帖子,以解释如何使用主题和皮肤文件。 - A_Nabelsi
如果我理解有误的话,你不仅在 asp:Button 中引用皮肤时需要使用 SkinID="MultiLineTextBox" 属性,而且在定义皮肤时也需要使用它(第二行代码)。无论如何,这是个好答案。 - Tomas00
1
这是一篇不错的文章,起初我在设置皮肤方面遇到了困难,后来理解清楚了并获得了预期的结果。 - Smaug
@A_Nablsi,您可以使用以下代码替代: <pages theme="Your Theme Name"></pages> 而不是: <pages styleSheetTheme="Your Theme Name"></pages>我说的对吗?如果是,这两种方式有什么区别吗? - Ashok Jingar

7
请注意,就它们实际所做的事情而言,两者有很大的区别。在.skin文件中设置的任何属性都会复制到所有页面控件上。使用层叠样式表的优点是信息只需加载和缓存一次(并可应用于多个网页)。skin文件可能会导致页面膨胀,因为每次呈现页面时,必须将skin文件中设置的所有属性与每个受影响控件合并。
此外,ASP.NET主题.skin文件的默认行为是覆盖受影响控件的属性(这可能是意外的行为)。例如,如果您在.skin文件中为所有ASP:Labels设置了Width属性,则使用皮肤文件的所有ASP:Label的Width属性都将设置为.skin文件的Width属性,而不考虑控件的单独Width设置。为避免此行为,可以使用ASP.NET StyleSheetTheme,使控件级属性覆盖全局.skin属性。

我不明白:你是说所有编译后的 ASPX 都会有一个初始化部分,其中包含所有皮肤属性吗?这不是在服务器端完成的吗,而且只需要一次吗?那为什么要在意呢? - Rup
它是在服务器端完成的。但是,每次请求页面时都会执行一次,这会增加一些开销。 - NotMe
谢谢Chris,是的,属性是在服务器端添加到每个控件中的,这会增加页面大小。 - Kit Roed

1

即使是在CSS中,您也可以设置一些属性,例如宽度。除了能够设置CSS无法设置的属性外,还有一些需要使用.skin文件的东西。

考虑这样一个例子,您需要在页面上的所有asp:Label控件中将文本都设置为蓝色。asp:Label实际上是嵌套在一个隐藏的div元素中的span元素内的文本。这就是为什么我们能够为这个asp:Label设置一些像BackColor这样的属性,而标准标签控件没有"BackColor"属性的原因。

因此,如果您尝试通过CSS将字体颜色设置给所有ASP标签,

那么类似于下面的内容:

Label {
color: Blue; 
}

不会起作用。另一方面,使用皮肤文件,您可以编写。
 <asp:Label runat="server" ForeColor="Blue"></asp:Label>

这将把所有标签设置为蓝色。

2
如果在asp:Label上设置'AssociatedControlID'属性,则您的标签CSS将起作用,因为asp:Label将呈现为'label'而不是'span'。此外,您可以定义一个“label”皮肤,将“label”类应用于呈现的span。http://jsfiddle.net/JamVw/ - Homer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接