Benim önerim:
Goto Global.asax
. yöntem Application_Start
aşağıdaki satırı içerdiğinden emin olun
protected void Application_Start()
{
...
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
bulun veya aşağıdaki gibi preferrably klasörde App_Start
yılında, sınıf BundleConfig
oluşturun:
<link rel="stylesheet" type="text/css" href="Styles/page1" />
:
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"));
}
}
Artık her uygun sayfaya karşılık gelen grubu kullanabilir
Veya daha iyisi kod:
@Styles.Render("~/Styles/page1")
(bu cshtml
, ancak aspx
sözdizimi çok benzerdir).
Sayfa başına ayrı bir pakete sahip olmanız gerektiğini unutmayın. Bir ve aynı paketi anında değiştirmemelisiniz. Paketlerin sanal URL'leri var. Örnekte sadece css
olduğunu. Bunlar tarayıcılar tarafından önbelleğe alınır, bu nedenle hava koşullarında paketin içeriğini değiştirdiğinizden bağımsız olarak bir tarayıcı bunun aynı olduğunu düşünebilir ve yeniden getiremez.
Yukarıdaki yönteme elle her sayfayı ekleme hakkında bakmak istemiyorsanız
. Otomatikleştirebilirsin. Aşağıdaki kod size bir fikir verebilir nasıl:
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;
}
}
Kullanımı: Yalnızca Master'de site.css ve daha sonra bir sayfa css dosyası yüklenirken, o zaman niye
<link rel="stylesheet" type="text/css" href="<%: MyStyleHelper.RenderPageSpecificStyle(Page.AppRelativeVirtualPath) %>" />
paket halde? –
@TimBJames, * tüm klasörün içeriğini yüklüyordu.Ana sayfada yalnızca site düzeyinde CSS'yi yüklemek ve gerektiğinde ek CSS dosyalarını paketlemek istiyorum. –
bunu ilk kez okuyor. Bu, paketlemenin amacını bozmaz mı? Sonuçta, paketlemeden, ilk yüklemede site.css ve page1.css yüklersiniz, ardından 2. sayfaya gittikçe sayfa2.css, page3.css sayfa 3, vb. Yükler. Sayfanın belirli CSS dosyalarını yükler. genellikle genel siteden çok daha küçüktür, her sayfada farklı büyük bir dosya yüklüyorsunuz ve her sayfada küçük bir dosya yüklüyorsanız, yalnızca iyileştirme yaptığınız ilk sayfa olur 2 yerine 1 dosya yükle (aynı toplam boyutta) – Rodolfo