Stiller. MVC4'te oluşturma


Yanıtlar:


453

Klasördeki BundleConfigsınıfın içinde bildirilen belirli pakete dahil olan dosyaları çağırıyor App_Start.

Bu durumda @Styles.Render("~/Content/css"), çağrı "~ / Content / site.css" olarak adlandırılıyor.

bundles.Add(new StyleBundle("~/Content/css").Include("~/Content/site.css"));

22
Bilmeniz gereken bir şey, pakete zaten küçültülmüş bir .css dosyası eklemeyecek olmasıdır. Örnek: bootstrap.min.js ile çalışmaz, sadece bootstrap.js ile çalışmaz. Umarım bu başkalarına yardımcı olabilir.
codea

5
Bu senaryolar hakkında değil, stiller hakkında konuşuyor. Bootstrap.min.js dosyasını kullanmak istiyorsanız, sadece şöyle bir paket oluşturun: bundles.Add (yeni ScriptBundle ("~ / bundles / bootstrap"). Include ("~ / Scripts / bootstrap.min.js"));
Xcalibur37

1
@codea Ben senin tuzak olduğunu, ancak varsayılan olarak paketleyici alacak emin değilim *.min.*üzerinde *.*dosyaları.
skmasq

@skmasq, bu satırları yazarken VS2013 kullanıyordum. Şimdiye kadar işler değişmiş olabilir. Bundan bahsettiğiniz için teşekkürler :)
codea

Anlamıyorum .... neden sadece web sayfanızdaki dosyaya bir CSS <link> ekleyebilirsiniz zaman paketleri oluşturmak ve MVC bu çılgın sınıflara bu yolları eklemek için tüm sorun gidin? Tüm CSS bağlantılarınızı mizanpaj dosyalarınıza veya kısmi bir görünümde stil sayfalarınıza eklerseniz, bunları basit bir yerde de yönetebilirsiniz. Bu aynı zamanda zor kod için kötü bir tasarımdır. 20 yıl önce tasarlandığında CSS sisteminin tüm amacı olan CSS kaplamalarını artık oluşturamayacağınız için bu gibi stil yolları.
Stokely

34

Büyük / küçük harf duyarlılığına dikkat edin. Bir dosyanız varsa

/Content/bootstrap.css

ve Bundle.config dosyasında yeniden yönlendirirsiniz

.Include ( "~ / İçerik / Bootstrap.css")

css yüklemez.


Ayrıca: İkinci kapsama farklı yazılır.
Dan Esparza

1
sass / less-files için de destek var mı?
Manticore

12

Partiye biraz geç. Kimse bahsedilen var gibi Ama öyle görünüyor
donatılacak ve minification arasında StyleBundleyani ..

@Styles.Render("~/Content/css") 

çağrılar Application_Start():

BundleConfig.RegisterBundles(BundleTable.Bundles);            

hangi sırayla

public static void RegisterBundles(BundleCollection bundles)
{
    bundles.Add(new StyleBundle("~/Content/css").Include(
              "~/Content/bootstrap.css",
              "~/Content/Site.css"));
}

RegisterBundles()etkin bir şekilde birleştirir ve küçültür bootstrap.css ve Site.css
tek bir dosya haline,

<link href="/Content/css?v=omEnf6XKhDfHpwdllcEwzSIFQajQQLOQweh_aX9VVWY1" rel="stylesheet">

Ama ..

<system.web>
  <compilation debug="false" targetFramework="4.6.1" />
</system.web>

sadece debug ayarlandığında falseiçinde Web.config.
Aksi takdirde bootstrap.css& Site.cssayrı ayrı sunulacaktır.
Paketlenmemiş veya küçültülmemiş:

<link href="/Content/bootstrap.css" rel="stylesheet">
<link href="/Content/Site.css" rel="stylesheet">


0

App_start.BundleConfig içinde tanımlandığı gibi, sadece

bundles.Add(new StyleBundle("~/Content/css").Include("~/Content/site.css"));

Bu bölümü kaldırsanız bile hiçbir şey olmuyor.


0

Polo, MVC'de Paketleri birden fazla nedenden dolayı kullanmazdım. Apps_Start klasörünüzde özel bir BundleConfig sınıfı ayarlamanız gerektiğinden, sizin durumunuzda çalışmaz. HTML'nizin başına böyle bir stil ekleyebildiğinizde bu bir anlam ifade etmez:

<link rel="stylesheet" href="~/Content/bootstrap.css" />
<link rel="stylesheet" href="~/Content/bootstrap.theme.css" />

Bunları, tüm görünümlerinizden çağrılan ve her sayfaya bırakılan bir Layout.cshtml veya kısmi sınıfa da ekleyebilirsiniz. Stilleriniz değişirse, yeniden derlemek zorunda kalmadan adı ve yolu kolayca değiştirebilirsiniz.

Bir sınıfta CSS'ye sabit kodlu bağlantılar eklemek, kullanıcı arayüzünün ve tasarımın uygulama modelinden ayrılması amacını ortadan kaldırır. Ayrıca c # 'da yönetilen sabit kodlanmış stil sayfası yollarını da istemezsiniz çünkü artık farklı cihazlar, temalar vb. İçin "kaplamalar" veya ayrı stil modelleri oluşturamazsınız:

<link rel="stylesheet" href="~/UI/Skins/skin1/base.css" />
<link rel="stylesheet" href="~/UI/Skins/skin2/base.css" />

Bu sistemi ve Razor'u kullanarak artık Skin Path'i bir veritabanı veya kullanıcı ayarından değiştirebilir ve sadece yolu dinamik olarak değiştirerek web sitenizin tüm tasarımını değiştirebilirsiniz.

CSS'nin 15 yıl önce tüm amacı, siteler için kullanıcı tarafından kontrol edilen ve uygulama tarafından kontrol edilen stil sayfası "kaplamaları" geliştirmekti, böylece uygulamadan ayrı olarak kullanıcı arayüzü görünümünü kapatabilir ve içeriği veri yapısından bağımsız olarak yeniden tasarlayabilirsiniz. .... örneğin yazdırılabilir bir sürüm, mobil, ses sürümü, ham xml vb.

Şimdi C # sınıflarını, Bootstrap gibi katı stilleri kullanan bu "eski moda" sabit kodlu yol sistemine geçerek ve sitelerin temalarını uygulama koduyla birleştirerek 1998'de web sitelerinin nasıl oluşturulduğuna tekrar geri döndük.


1
Öyleyse, minificationo zaman? : s / :(
Scott Fraley

Evet. Neden 2019'daki geliştiriciler css ve javascript'i en aza indiriyor ancak daha sonra Angular ve diğerleri gibi megabaytlara gereksiz ECMAScript (Javascript) gönderen API'ler oluşturuyor? Biz bant genişliği tarafından kısıtlanmış zaman kodu alabilir böylece sınırlı bant genişliği olan müşterilere daha az kod veya sıkıştırılmış kod göndermek için kullanılır .... yani 14 k baud modemler. 5G geliyor, bu yüzden gif sıkıştırma veya küçültme gibi kod sıkıştırma gerekli değil. Yine de, sonuç olarak müşterilere büyük senaryolar göndererek geriye doğru gittik. Öyleyse neden bir şeyi en aza indirgeyelim?
Stokely

1
Çünkü olabildiğince az tel üzerinden göndermeliyiz? Kesinlikle işleri minimumda tutmaya çalışıyorum.
Scott Fraley

0

Ben bir MVC 3 web paketleme eklemek için gerekli her şeyi yaptım (mevcut çözümde yeniyim). Styles.Renderbenim için çalışmadı. Sonunda basitçe iki nokta üst üste kaçırdığımı keşfettim. Ana sayfada: <%: Styles.Render("~/Content/Css") %> Hala (aynı sayfada) iki nokta üst üste olmadan neden <% Html.RenderPartial("LogOnUserControl"); %>çalıştığı konusunda kafam karıştı .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.