【问题标题】:ASP.NET themes and static contentsASP.NET 主题和静态内容
【发布时间】:2011-06-03 10:23:28
【问题描述】:

众所周知,ASP.NET 将每个 CSS 样式表包含在页面内 App_Themes 的 Theme 文件夹中。没有讨论。

但是现在,我在一个主题中有很多 CSS 文件并且愿意使用 static content domain 时遇到了一个小问题。我想从静态域加载我网站的所有静态内容(不仅是 CSS,还包括图标、图像等),但现在让我们只关注 CSS。

我的问题是

是否可以覆盖 Page 类的行为,并且对于在主题文件夹中找到的每个 CSS 文件,用静态内容域的正确 URL 重写 <link> 标记?我没有什么可以阻止我将文件部署到http://static.domain.com/App_Themes/Theme 路径中,所以至少在标签中添加一个前缀就可以了。

提前谢谢你。

【问题讨论】:

    标签: asp.net css themes


    【解决方案1】:

    是的,你可以。您可以让自定义基页类编写它在文件夹中找到的 CSS 文件。不过,我不确定您是否可以覆盖主题功能的默认行为,因此最简单的方法是将 CSS 文件移到默认主题之外。然后,您可以使用 System.IO 对象来读取目录、访问文件并生成链接。

    HTH。

    【讨论】:

    • 作为临时解决方案当然是可行的。但是我不知道维护广泛基于可在运行时切换的主题的 legacy 应用程序(只要它们都有一个公共的基本 Page 类)有多么困难。我会继续研究 ASP.NET 和 Mono 的代码来寻找提示;)
    • 当然,您的解决方案是唯一可行的解决方案。通过分析 ASP.NET 的代码,我发现许多必需的类/方法是内部的。 PageTheme 类是一个抽象类,但是我没有找到重写它的方法,但是最重要它的SetStyleSheet 方法是internal。无论如何,感谢您的帮助。我想做一些更大、更具可扩展性的事情
    【解决方案2】:

    另一种方法是编写一个 http 模块。让模块检查发送回客户端的 html。

    如果它检测到样式表引用,请更改样式表从中提取的位置。

    这也适用于其他项目,例如图像等。

    【讨论】:

    • 哇!!!看来我们今天赢了!!!我想过类似的事情(我在 PHP 中重写 URL 所做的事情),但我认为 HttpModule 不能检查传出的 HTML!我应该挂钩什么 HttpApplication 事件?
    • 问题结束请求。您想在退出时修改 html。 blog.tylerholmes.com/2008/09/httpmodules-your-best-friend.html
    猜你喜欢
    • 1970-01-01
    • 2012-12-22
    • 2015-04-02
    • 2017-08-16
    • 1970-01-01
    • 2016-08-13
    • 2011-06-24
    • 2012-12-14
    • 2012-03-08
    相关资源
    最近更新 更多