代码之家  ›  专栏  ›  技术社区  ›  Jason Z

将内联CSS应用于ASP.NET服务器控件

  •  13
  • Jason Z  · 技术社区  · 16 年前

    基于我运行的一个简单测试,我认为不可能将内联<样式>标记放入ASP.NET服务器控件中。样式最终没有呈现到输出HTML。即使可能,我相信这样做是不好的做法。

    可以这样做吗?我可以看到它对于只应用1或2个CSS类的快速原型非常有用。

    更新:

    按照乔纳森的要求,我要发布密码。但是,当我打开我的项目并再次加载页面时(只是为了好玩),它运行正常。我猜这与重新启动Visual Studio在运行页面时启动的ASP.NET开发服务器有关。

    无论如何,当我在页面上包含相同的多个控件时,我也得到了多个相同的样式。这可能就是为什么这样做是件坏事的原因。不管怎样,了解完成一项任务的最佳实践和替代方法总是很好的,所以我要感谢每个人的回答。

    4 回复  |  直到 16 年前
        1
  •  13
  •   Zach Esposito Tom Robinson    9 年前

    根据 www.w3schools.com :

    样式元素位于标题部分。如果希望在页面中包含样式表,则应在外部定义样式表,并使用链接到该样式表 <link> .

    因此,包含样式元素(例如 <style type="text\css"></style> 块)在控件中。如果可以的话,它可能会在某些浏览器中产生效果,但它不会验证,这是一种糟糕的做法。

    如果要将样式内联应用于元素,则这两种方法都可以:

    C.*

    myControl.Attributes["style"] = "color:red";
    
    myControl.Attributes.Add("style", "color:red");
    

    VB.NET

    myControl.Attributes("style") = "color:red";
    
    myControl.Attributes.Add("style", "color:red");
    

    但要记住 这将替换在“样式”属性上设置的任何现有样式。 . 如果您尝试在代码中的多个位置设置样式,这可能是一个问题,因此需要注意。

    最好使用CSS类,因为您可以将多个样式声明分组,并避免冗余和页面膨胀。所有源于的控件 WebControl 有一个 CssClass 可以使用的属性,但请注意不要覆盖已在其他地方应用的现有类。

        2
  •  46
  •   NakedBrunch    16 年前

    IntelliSense不会给您提示,但您可以这样做:

    <asp:Label ID="Label1" runat="server" Text="Label" style="color:Red;"></asp:Label>
    
        3
  •  7
  •   Hutch    11 年前

    如果使用属性[“样式”],则每次调用该样式时都会覆盖该样式。如果您在代码的两个不同部分中进行调用,这可能是一个问题。同样,它也可能是一个问题,因为框架包含一些基本设置的属性,如边框和颜色,这些属性也将作为内嵌样式应用。下面是一个例子:

    // wrong: first style will be overwritten
    myControl.Attributes["style"] = "text-align:center";
    // in some other section of code
    myControl.Attributes["style"] = "width:100%";
    

    要玩得很好,请设置如下样式:

    // correct: both style settings are applied
    myControl.Attributes.CssStyle.Add("text-align", "center");
    // in some other section of code
    myControl.Attributes.CssStyle.Add("width", "100%");
    
        4
  •  1
  •   Vaibhav    16 年前

    我认为您必须将它作为属性添加到服务器控件中…以便呈现为HTML。

    所以基本上(用c表示)

    ControlName.Attributes["style"] = "color:red";