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

发布于 2024-07-13 18:04:15 字数 252 浏览 7 评论 0原文

我需要从自定义控件中添加到页面。 我无法使用样式表 (.css),因为我使用的是 url(...) 并且需要解析该 url。

现在我正在做:

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

但我希望有一些更优雅的东西?

I need to add to the page from within a custom control. I can't use a stylesheet (.css) because I'm using a url(...) and need to resolve the url.

Right now I'm doing:

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

But I'm hoping for something a touch more elegant?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

哭泣的笑容 2024-07-20 18:04:16

我创建自己的类并继承 Style,并使用自己的字典来存储默认 Style 类不包含的属性。 这是一个简短的例子......

                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);
    }

I create my own class and inherit Style, with my own dictionary for attributes that the default Style class does not include. Here is a brief example...

                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);
    }
为人所爱 2024-07-20 18:04: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 }");

博客条目 和注释显示了一些替代方案(ScriptManager.RegisterClientScriptBlock)。 但在我看来你的解决方案是可以的。

I guess it's not a bad solution for the problem. If you had an external stylesheet file, this piece of code will do the work:

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

Another idea is to write your own ASP.NET ServerControl "HtmlInlineStyle", so you could call it this way (script tags would be done by your server control):

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

This blog entry and the comments show some alternatives (ScriptManager.RegisterClientScriptBlock). But in my opinion your solution is okay.

月亮邮递员 2024-07-20 18:04: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>

Here's another way... For example:

Parent ASPX portion:

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

Within the Control:

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

Note that this assumes that the parent ASPX page has the class attribute set for the target control. If not, then you will need to merge the style with the control using the MergeStyle method. (This requires that the control be runat="server").

This code renders the following output: (Showing entire source for your convenience)

<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>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文