14

Sadece VS 2012 RC ile çalışmaya başladı. Bir ana sayfa ve tek bir web formuyla bir test sitesi oluşturdum.:Visual Studio 2012 Şartlı Bundling

<link rel="stylesheet" type="text/css" href="Styles/css" /> 

Soru Site.Master

Global.asax

BundleTable.Bundles.EnableDefaultBundles(); 

: Şu anda, sitede tüm Styles klasörü paket için bu kodu kullanıyorum Test sitesi, sitenin genel görünümünü ve görünümünü kontrol eden site düzeyinde bir CSS dosyasına sahiptir. Site düzeyinde CSS ek olarak, her bir sayfa kendi CSS tanımları olabilir. Ana sayfaya yalnızca site.css dosyasının eklenmesi mümkün mü ve daha sonra her sayfanın gerektirdiği şekilde koşullu olarak .css dosyalarını pakete eklemek mümkün mü?

Ben Default.aspx kodda denedim ama işe yaramadı:

BundleTable.Bundles.Add(new Bundle("~/Styles/Default.css")); 
+0

paket halde? –

+0

@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. –

+0

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

cevap

7

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) %>" /> 
+0

Yanlış mıyım, yoksa otomasyon örneğiniz bunun bir MVC uygulaması olduğunu varsayar mı? –

+0

Merhaba James Hill, evet ilk hızlı taslağım ** MVC idi. Not defteri kodlanmış ve bazı hatalar da vardı. Şimdi onu sade ASP'ye tekrar yazdım ve test ettim. Gayet iyi görünüyor. Lütfen düzenlemelerimi inceleyin. –

+0

FYI - 'ResolveUrl()' kullanımınıza eklenmelidir. Onsuz çalışmayacak. –