我的建议:
Goto 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
, but 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;
}
}
Usage:
<link rel="stylesheet" type="text/css" href="<%: MyStyleHelper.RenderPageSpecificStyle(Page.AppRelativeVirtualPath) %>" />