14

VS2012RCを使い始めたばかりです。マスターページと単一のWebフォームを使用してテストサイトを作成しました。現在、私はこのコードを使用しStylesて、サイト上のフォルダー全体をバンドルしています。

Global.asax

BundleTable.Bundles.EnableDefaultBundles();

Site.master

<link rel="stylesheet" type="text/css" href="Styles/css" />

質問:テストサイトには、サイトの全体的なルックアンドフィールを制御するサイトレベルのCSSファイルがあります。サイトレベルのCSSに加えて、各ページに独自のCSS定義を含めることができます。マスターページにファイルのみを含めてsite.cssから、各ページの必要に応じて.cssファイルをバンドルに条件付きで追加することは可能ですか?

の後ろのコードでこれを試しましたDefault.aspxが、機能しませんでした:

BundleTable.Bundles.Add(new Bundle("~/Styles/Default.css"));
4

1 に答える 1

7

私のおすすめ:

後藤Global.asaxApplication_Startメソッドに次の行が含まれていることを確認します。

protected void Application_Start()
{
    ...
    BundleConfig.RegisterBundles(BundleTable.Bundles);
}

BundleConfig次のように、できればフォルダ内でクラスを検索または作成しますApp_Start

public class BundleConfig
{
    public static void RegisterBundles(BundleCollection bundles)
    {
        ...

        bundles.Add(new StyleBundle("~page1").Include(
             "~/Styles/site.css",
             "~/Styles/page1.css"));

        bundles.Add(new StyleBundle("~page2").Include(
             "~/Styles/site.css",
             "~/Styles/page2.css"));

        ...

        bundles.Add(new StyleBundle("~pageN").Include(
             "~/Styles/site.css",
             "~/Styles/pageN.css"));

    }
}

次に、適切なすべてのページで対応するバンドルを使用します。

<link rel="stylesheet" type="text/css" href="Styles/page1" />

またはコードからより良い:

@Styles.Render("~/Styles/page1")

(これはですcshtmlが、aspx構文は確かに非常に似ています)。

ページごとに個別のバンドルが必要であることに注意してください。同じバンドルをその場で変更しないでください。バンドルには仮想URLがあります。あなたの例では、それはただcssです。これらはブラウザによってキャッシュされるため、天候に関係なく、バンドルのコンテンツをその場で変更した場合、ブラウザはこれが同じであると見なし、再フェッチしない可能性があります。


上記の方法にすべてのページを手動で追加する必要がない場合。あなたはそれを自動化することができます。次のコードは、どのようにあなたにアイデアを与えることができます:

public class MyStyleHelper
{
    public static string RenderPageSpecificStyle(string pagePath)
    {
        var pageName = GetPageName(pagePath);
        string bundleName = EnsureBundle(pageName);
        return bundleName;
    }

    public static string GetPageName(string pagePath)
    {
        string pageFileName = pagePath.Substring(pagePath.LastIndexOf('/'));
        string pageNameWithoutExtension = Path.GetFileNameWithoutExtension(pageFileName);
        return pageNameWithoutExtension;
    }

    public static string EnsureBundle(string pageName)
    {
        var bundleName = "~/styles/" + pageName;
        var bundle = BundleTable.Bundles.GetBundleFor(bundleName);
        if (bundle == null)
        {
            bundle = new StyleBundle(bundleName).Include(
                "~/styles/site.css",
                "~/styles/" + pageName + ".css");
            BundleTable.Bundles.Add(bundle);
        }
        return bundleName;
    }
}

使用法:

<link rel="stylesheet" type="text/css" href="<%: MyStyleHelper.RenderPageSpecificStyle(Page.AppRelativeVirtualPath) %>" />
于 2012-07-25T20:50:34.123 に答える