この質問は、私がどういうわけか要求された構文を機能させることができるかどうかを確認するためにいくつかのテストを行うように私を刺激しました。
比較的簡単であることがわかりました。いくつかの異なるテストバージョンの後、これが私がやったことです。
構成
- テストする新しいWebアプリケーションを作成します
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.Net4.5のCssバンドル機能を使用できません。また、(言うまでもなく)CssファイルでコーディングするときにC#インテリセンスを取得しません。