私のおすすめ:
後藤Global.asax
。Application_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) %>" />