Mi sugerencia:
Goto Global.asax
. Asegúrese de que el método de Application_Start
contiene siguiente línea:
protected void Application_Start()
{
...
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
encontrar o crear la clase BundleConfig
de la siguiente manera, de preferencia en la carpeta 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"));
}
}
Ahora use haz correspondiente en cada página correspondiente:
<link rel="stylesheet" type="text/css" href="Styles/page1" />
O mejor del código:
@Styles.Render("~/Styles/page1")
(esto es cshtml
, pero la sintaxis de aspx
es muy similar).
Tenga en cuenta que debe tener un paquete separado por página. No debe modificar uno y el mismo paquete sobre la marcha. Los paquetes tienen Urls virtuales. En su ejemplo, es solo css
. Estos son almacenados en caché por los navegadores, por lo que, independientemente del tiempo en que hayas cambiado el contenido del paquete sobre la marcha, un navegador puede pensar que es el mismo y no volver a buscarlo.
Si no desea tener cuidado acerca de la adición de todos y cada página de forma manual con el método anterior. Puedes automatizarlo. Después de código que podría dar una idea de cómo:
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;
}
}
Uso:
<link rel="stylesheet" type="text/css" href="<%: MyStyleHelper.RenderPageSpecificStyle(Page.AppRelativeVirtualPath) %>" />
Si sólo está cargando site.css en master y luego un archivo css página, entonces ¿por qué estás empaquetando? –
@TimBJames, I * estaba * cargando el contenido de la carpeta completa.Me gustaría cargar solo el CSS a nivel del sitio en la página maestra y luego agrupar los archivos CSS adicionales según sea necesario. –
leyendo esto por primera vez. ¿Esto no derrota el propósito de la agrupación? Después de todo, sin empaquetar cargaría site.css y page1.css en la primera carga, luego, cuando vaya a la página 2 solo cargará page2.css, page3.css para la página 3, etc. Asumiendo que los archivos CSS específicos de la página suelen ser mucho más pequeños que el sitio general, con la agrupación que se carga un archivo grande diferente en cada página, y sin empaquetar cargaría un pequeño archivo en cada página, solo la mejora sería la primera página donde cargar 1 archivo en lugar de 2 (mismo tamaño total) – Rodolfo