代码之家  ›  专栏  ›  技术社区  ›  user53794

ASP.NET 2.0动态向控件中的页面添加样式

  •  6
  • user53794  · 技术社区  · 15 年前

    我需要从自定义控件中添加到页面。我不能使用样式表(.css),因为我使用的是URL(…),需要解析该URL。

    现在我在做:

    Page.Header.Controls.Add(new LiteralControl("<style type='text/css'>.xyz { color: blue; }</style>"));
    

    但我希望能有点优雅?

    3 回复  |  直到 9 年前
        1
  •  3
  •   splattne    15 年前

    我想这不是解决问题的好办法。如果你有一个 外部样式表文件 ,这段代码将完成以下工作:

    HtmlLink cssRef = new HtmlLink();
    cssRef.Href = "styles/main.css";
    cssRef.Attributes["rel"] = "stylesheet";
    cssRef.Attributes["type"] = "text/css";
    Page.Header.Controls.Add(cssRef);
    

    另一个想法是写 您自己的ASP.NET ServerControl “htmlinlinestyle”,因此可以这样称呼它(脚本标记将由服务器控件完成):

    Page.Header.Controls.Add(
       New HtmlInlineStyle(".xyz { width:300px;padding-left:10px }");
    

    这个 blog entry 这些注释显示了一些可选方案(scriptmanager.registerclientscriptBlock)。但在我看来,你的解决方案是好的。

        2
  •  1
  •   Cerebrus    15 年前

    这是另一种方法…例如:

    父ASPX部分:

    <div id="div1" class="xyz" style="width: 40px; height: 40px;">
        <span>abc</span>
    </div>
    

    在控制范围内:

    Dim xyzStyle As New Style()
    xyzStyle.CssClass = "xyz"
    xyzStyle.BackColor = Drawing.Color.LightBlue
    Page.Header.StyleSheet.CreateStyleRule(xyzStyle, Nothing, ".xyz")
    

    注意,这假定父ASPX页为目标控件设置了类属性。如果没有,那么你需要 合并 使用MergeStyle方法的控件的样式。(这要求控制 runat="server" )

    此代码呈现以下输出:(为了方便起见,显示整个源代码)

    <html>
    <head>
      <title>Untitled Page </title>
      <style type="text/css">
        .xyz { background-color:LightBlue; }
      </style>
    </head>
    <body>
      <form name="form1" method="post" action="MyPage.aspx" id="form1">
        <div id="div1" class="xyz" style="width: 40px; height: 40px;">
          <span>abc</span>
        </div>
      </form>
    </body>
    </html>
    
        3
  •  0
  •   The Modulator    9 年前

    我用自己的字典为默认样式类不包含的属性创建自己的类并继承样式。下面是一个简单的例子…

                    protected override void FillStyleAttributes(CssStyleCollection attributes, IUrlResolutionService urlResolver)
        {
            Dictionary<String, String> _styles = new Dictionary<string, string>();
            _styles.Add("display", "inline-block");
            foreach (String s in _styles.Keys)
            {
                attributes[s] = (String)_styles[s];
            }
            base.FillStyleAttributes(attributes, urlResolver);
        }
    
    推荐文章