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.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#インテリセンスを取得しません。

于 2012-08-31T13:04:43.600 に答える
0

これを試して:

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

HTMLの代わりにCSSを返すASPXページを作成することはできませんか?次に、CSS宣言で.aspxファイルを参照します。

于 2012-08-23T11:04:30.870 に答える
0

使えると思いますashxハンドラーページを作成し、応答ヘッダーを追加します。

Content-Type: text/css
于 2012-08-23T11:04:59.870 に答える