私の提案:
後藤Global.asax
を。次のように
protected void Application_Start()
{
...
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
ができれフォルダApp_Start
で、クラスBundleConfig
を検索または作成します:
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" />
を
Application_Start
は、次の行が含まれている方法を確認してください
コードより:
@Styles.Render("~/Styles/page1")
(これはcshtml
ですが、aspx
の構文は確かに非常に似ています)。
ページごとに別々のバンドルが必要です。 1つのバンドルと同じバンドルをオンザフライで変更しないでください。バンドルには仮想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;
}
}
使用法:あなたが唯一のマスターでsite.cssし、ページのCSSファイルをロードしている場合は、なぜあなたは
<link rel="stylesheet" type="text/css" href="<%: MyStyleHelper.RenderPageSpecificStyle(Page.AppRelativeVirtualPath) %>" />
をバンドルしていますか? –
@TimBJames、私は*フォルダ全体の内容を読み込んでいました。マスターページにサイトレベルのCSSだけをロードし、必要に応じて追加のCSSファイルをバンドルしたいと思います。 –
これをはじめて読む。これはバンドルの目的を破るものではありませんか?結局のところ、バンドルせずに、最初のロードでsite.cssとpage1.cssをロードすると、2ページ目に行くとページ3のpage2.css、page3.cssなどしかロードされません。ページ固有のCSSファイル通常は一般的なサイトよりもはるかに小さく、バンドルすると各ページに異なる大きなファイルを読み込み、バンドルすることなく各ページに小さなファイルを読み込みますが、改善だけが最初のページになります2の代わりに1つのファイルをロードする(同じ合計サイズ) – Rodolfo