asp.net - 在 ASP.net 中运行 CSS 文件中的代码

标签 asp.net css iis iis-7 server-side

在我的 CSS 文件中,我希望有如下定义:

.hr {
    background:url('<%=CommonFunctions.AllocateStaticPath("/images/hr.png") %>');
    width: 100%;
    height: 2px;
    margin: 40px 0;
}

这对我很有用,因为每个图像的路径在生产服务器和开发服务器上都不同,并且该函数正确设置了资源路径。能够做到这一点将简化我的发布过程。

如何使 IIS7 能够在 CSS 文件上运行 ASP.net?我尝试将 CSS 文件重命名为 .ashx 并创建重写规则,但这似乎总是 404。

最佳答案

这个问题启发了我做一些测试,看看我是否能以某种方式让所要求的语法起作用。

事实证明,这相对容易。在几个不同的测试版本之后,这就是我最终要做的。

配置

  1. 创建一个全新的网络应用程序进行测试
  2. 创建一个名为 DynCss 的文件夹,其中将放置需要动态处理的 css 文件
  3. 注册 .css 文件,页面处理程序将处理此文件夹的请求。为此,我将以下内容添加到 web.config:

    <configuration>
       <system.web>
            ...
            <httpHandlers>
                <add type="System.Web.UI.PageHandlerFactory" path="/DynCss/*.css" verb="GET"/>
            </httpHandlers>
            ...
        </system.web>
    </configuration>
    
  4. .css 文件注册构建处理程序:

    <configuration>
       <system.web>
            ...
            <compilation debug="true" targetFramework="4.0">
                <buildProviders>
                    <add extension=".css" type="System.Web.Compilation.PageBuildProvider" />
                </buildProviders>
            </compilation>
            ...
        </system.web>
    </configuration>
    

完成这些更改后,我可以继续对其进行测试。

测试

为了测试,我将 DynamicStyles.css 添加到 DynCss 文件夹中。 DynamicStyles.css 的内容:

<%@ Page Title="DynamicStyles.css" Language="C#" AutoEventWireup="true" %>
<script runat="server">
    protected void Page_Load(object sender, EventArgs e) 
    {
          Response.ContentType="text/css";
          Response.Cache.SetCacheability(HttpCacheability.Public);
    }
</script>
body {
    font-weight: <%= TestDynamicCss.Code.Constants.FontWeight %>;
}

注意:TestDynamicCss.Code.Constants.FontWeight 引用静态类的静态属性。我只是返回字符串“bold”。

最后,我在 Default.aspx 中链接到它:

<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
    CodeBehind="Default.aspx.cs" Inherits="TestDynamicCss._Default" %>

<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
    <link href="/DynCss/DynamicStyles.css" rel="Stylesheet" type="text/css" />
</asp:Content>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
    <h2>
        Welcome to ASP.NET! Is this now bold? Why yes, it is!
    </h2>
</asp:Content>

评论

使用这种方法,您可以获得您要求的行为。缺点是您不会像处理静态 css 文件那样获得任何自动缓存处理。此外,这种方法(据我所知)使得无法使用 Asp.Net 4.5 的 Css 捆绑功能。此外(不用说)您在 Css 文件中编码时不会获得 C# 智能感知。

关于asp.net - 在 ASP.net 中运行 CSS 文件中的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12090075/

相关文章:

php - 只有少数 CSS 和图像未加载

windows - 自动安装 IIS

iis - 301 重写规则导致 SEO 警报

Javascript 文件不会在 Visual Studio ASP.NET 2.0 pro 中加载

javascript - Bootstrap scrollspy 在选项卡内不起作用?

javascript - 谷歌 API : Google Chart Gauge Animation not working with Ajax Call

css - 在最后一帧停止 CSS3 动画

ios - itms-services ://? action=download-manifest 在 IIS 中不起作用

jquery - 在 mvc3 jquery 中将下拉选定的值获取到文本框

asp.net - 查找最终/有效的 web.config 值(来自继承的配置)