1

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

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

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

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

4

4 回答 4

2

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

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

配置

  1. 创建一个全新的 Web 应用程序进行测试
  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.cssDynCss文件夹中。内容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引用静态类上的静态属性。我只是返回字符串“粗体”。

最后,我链接到它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# 智能感知。

于 2012-08-31T13:04:43.600 回答
0

尝试这个:

background:url('<%= CommonFunctions.AllocateStaticPath("/images/hr.png") %>');
于 2012-08-23T11:02:08.533 回答
0

您不能只创建一个返回 CSS 而不是 HTML 的 ASPX 页面吗?然后在您的 CSS 声明中引用 .aspx 文件。

于 2012-08-23T11:04:30.870 回答
0

我认为你可以使用ashx 处理程序一个页面并添加响应头:

Content-Type: text/css
于 2012-08-23T11:04:59.870 回答