【问题标题】:How to dynamically show/hide a style sheet inside a content control?如何在内容控件中动态显示/隐藏样式表?
【发布时间】:2009-07-23 13:10:23
【问题描述】:

我有一个母版页,在 head 标签内有一个 contentplaceholder 控件,这样我就可以从内容页面轻松地将任何内容添加到 head 标签(如链接标签、样式、脚本等)。

现在,在其中一个内容页面上,我有一个样式表(内联,即在样式标签内,未与链接标签链接),我想根据页面的状态显示/隐藏它(页面就像使用页面上的多视图控件的向导一样工作)。我尝试使用 Visible = false 将样式表包装在占位符控件中,然后在代码中将 Visible 设置为 true,但这不起作用,样式标记未在 html 中呈现。我删除了占位符控件并将 runat="server" 直接添加到样式标记中,但这也不起作用。

我首先隐藏样式的原因是它们包含格式占位符,即。 {0}、{1} ..etc,我在显示样式表之前将其替换为后面的代码。我不想使用这些占位符将样式发送给客户。为了更清楚,样式看起来类似于这样:

<asp:placeholder ID="_stylesPlaceHolder" runat="server" Visible="false">
<style type="text/css">
#elementid
{
  width: {0}px;
  height: {0}px;
  overflow: hidden;
  position: relative;
}
#elementid2
{
  position: absolute;
  width: {1}px;
  height: {2}px;
  top: {3}px;
  left: {4}px;
}
.. and so on

</style>
</asp:placeholder>

我可以尝试从页面后面的代码中动态添加样式(例如使用 Page.Header.StyleSheet.CreateStyleRule),但我更喜欢将它们保存在 .aspx 文件中,以便将 html 与代码分开,并且也可以更轻松地更改没有动态值的样式。

谢谢

【问题讨论】:

  • 嗨 Waleed,这两种方法似乎都对我有用。设置 然后在代码隐藏中显示/隐藏它是最好的。如果您尝试从 标记中删除 runat="server" 是否有效?
  • 感谢您的评论,这很奇怪,因为它在这里不起作用。请问您使用的是什么版本的 ASP.NET?我正在使用 ASP.NET 2.0。不幸的是,我无法从 head 标记中删除 runat="server",因为它是设置内容页面标题所必需的,我还是尝试了,但遇到了运行时错误。
  • 好的,我慢慢开始明白发生了什么。当我发布这个问题时,我正在使用谷歌浏览器进行测试,现在我使用 FireFox 进行了测试,它正在工作!我在 Chrome 中查看页面源代码,但什么也没看到,样式标签未呈现。我在 FireFox 中查看,样式标签就在那里!怎么回事?!

标签: asp.net master-pages


【解决方案1】:

好的,现在我终于明白了。首先,ASP.NET 没有任何问题。当我发布问题时,我正在使用谷歌浏览器进行测试。正如我在上面的评论中所指出的,后来我用 FireFox 进行了测试,发现样式标签确实在那里。

我在 Chrome 中再次检查,但这次我检查的是代码检查器而不是页面源,样式标签也在那里。 Chrome 不喜欢带有占位符的样式标签(我正在测试,所以我仍然没有替换占位符)并决定将其隐藏在页面源视图中并将其推到地毯下!好孩子!!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-22
    • 1970-01-01
    • 2016-07-18
    • 2016-04-14
    • 1970-01-01
    • 2017-05-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多