在我的 CSS 文件中,我希望有如下定义:
.hr {
background:url('<%=CommonFunctions.AllocateStaticPath("/images/hr.png") %>');
width: 100%;
height: 2px;
margin: 40px 0;
}
这对我很有用,因为每个图像的路径在生产服务器和开发服务器上都不同,并且该函数正确设置了资源路径。能够做到这一点将简化我的发布过程。
如何使 IIS7 能够在 CSS 文件上运行 ASP.net?我尝试将 CSS 文件重命名为 .ashx
并创建重写规则,但这似乎总是 404。
最佳答案
这个问题启发了我做一些测试,看看我是否能以某种方式让所要求的语法起作用。
事实证明,这相对容易。在几个不同的测试版本之后,这就是我最终要做的。
配置
- 创建一个全新的网络应用程序进行测试
- 创建一个名为
DynCss
的文件夹,其中将放置需要动态处理的 css 文件 注册
.css
文件,页面处理程序将处理此文件夹的请求。为此,我将以下内容添加到web.config
:<configuration> <system.web> ... <httpHandlers> <add type="System.Web.UI.PageHandlerFactory" path="/DynCss/*.css" verb="GET"/> </httpHandlers> ... </system.web> </configuration>
为
.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/