Ответ 1
Мое предложение:
Перейти к 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
наверняка очень похож).
Обратите внимание, что у вас должен быть отдельный пакет на страницу. Вы не должны изменять один и тот же комплект на лету. Связки имеют виртуальные адреса. В вашем примере это просто
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) %>" />