Style.Render w MVC4


Odpowiedzi:


453

Wywołuje pliki zawarte w tym konkretnym pakiecie, który jest zadeklarowany w BundleConfigklasie w App_Startfolderze.

W tym konkretnym przypadku Wywołanie @Styles.Render("~/Content/css")to „~ / Content / site.css”.

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

22
Jedną rzeczą, o której należy wiedzieć, jest to, że nie doda ona pliku .css, który jest już zminimalizowany w pakiecie. Przykład: nie działa z bootstrap.min.js, tylko z bootstrap.js. Mam nadzieję, że to może pomóc innym.
codea

5
Chodzi o style, a nie skrypty. Jeśli chcesz użyć bootstrap.min.js, po prostu utwórz taki pakiet: bundles.Add (new ScriptBundle („~ / bundles / bootstrap”). Include („~ / Scripts / bootstrap.min.js”));
Xcalibur37,

1
@codea Nie jestem pewien, co to set-up, ale domyślnie Bundler zajmie *.min.*ponad *.*plików.
skmasq

@skmasq, w momencie pisania tych linii korzystałem z VS2013. Do tej pory wszystko mogło się zmienić. Dzięki, że o tym wspomniałeś :)
codea

Nie rozumiem ... po co zadawać sobie tyle trudu, aby tworzyć pakiety i dodawać te ścieżki do tych szalonych klas w MVC, skoro możesz po prostu dodać <link> CSS do pliku na swojej stronie internetowej? Jeśli dodasz wszystkie linki CSS do arkuszy stylów, powiedzmy plik układu lub widok częściowy, możesz nimi zarządzać również w jednym prostym miejscu. Jest to również zły projekt do takich ścieżek stylu kodu, ponieważ nie można już tworzyć skór CSS, co było głównym celem systemu CSS, gdy był projektowany 20 lat temu.
Stokely

34

Uważaj na rozróżnianie wielkości liter. Jeśli masz plik

/Content/bootstrap.css

i przekierowujesz w pliku Bundle.config na

.Include („~ / Content / Bootstrap.css”)

nie załaduje css.


Również: Drugi dołączony jest napisany inaczej.
Dan Esparza

1
czy istnieje również obsługa plików sass / less?
Manticore,

12

Trochę późno na imprezę. Ale wydaje się, że nikt nie wspomniał
pakowanie w wiązki i minifikacji o StyleBundletak ..

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

wzywa Application_Start():

BundleConfig.RegisterBundles(BundleTable.Bundles);            

który z kolei wzywa

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

RegisterBundles()skutecznie łączy i minimalizuje bootstrap.css oraz Site.css
w jeden plik,

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

Ale ..

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

tylko gdy debug jest ustawiony na falsein Web.config.
Inaczej bootstrap.cssi Site.cssbędą podawane indywidualnie.
Nie w pakiecie ani nie zminimalizowane:

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

0

src="@url.content("~/Folderpath/*.css")" powinien renderować style


0

Jak zdefiniowano w App_start.BundleConfig, to tylko wywołanie

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

Nic się nie dzieje, nawet jeśli usuniesz tę sekcję.


0

Polo Nie używałbym pakietów w MVC z wielu powodów. To nie działa w twoim przypadku, ponieważ musisz skonfigurować niestandardową klasę BundleConfig w folderze Apps_Start. Nie ma to sensu, gdy możesz po prostu dodać styl w nagłówku HTML:

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

Możesz także dodać je do Layout.cshtml lub częściowej klasy, która jest wywoływana ze wszystkich twoich widoków i upuszczana na każdej stronie. Jeśli zmienią się twoje style, możesz łatwo zmienić nazwę i ścieżkę bez konieczności ponownej kompilacji.

Dodanie zakodowanych linków do CSS w klasie psuje również cały cel oddzielenia interfejsu użytkownika i projektu od modelu aplikacji. Nie chcesz też zarządzać ścieżkami arkusza stylów zakodowanych na sztywno w języku C #, ponieważ nie możesz już budować „skór” lub oddzielnych modeli stylów dla, powiedzmy, różnych urządzeń, motywów itp.

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

Korzystając z tego systemu i Razor, możesz teraz wyłączyć Ścieżkę skórki z bazy danych lub ustawień użytkownika i zmienić cały projekt swojej witryny, zmieniając dynamicznie ścieżkę.

Celem CSS 15 lat temu było opracowanie „skórek” arkusza stylów kontrolowanych przez użytkownika i kontrolowanych przez aplikacje dla witryn, aby można było zmienić wygląd interfejsu użytkownika i poczuć się oddzielny od aplikacji oraz zmienić przeznaczenie treści niezależnie od struktury danych. .... na przykład wersja do wydruku, wersja mobilna, wersja audio, nieprzetworzony plik XML itp.

Wracając teraz do tego „staromodnego”, zakodowanego na stałe systemu ścieżek, wykorzystującego klasy C #, sztywne style, takie jak Bootstrap, i łącząc motywy witryn z kodem aplikacji, cofnęliśmy się do tego, jak strony internetowe zostały zbudowane w 1998 roku.


1
Więc do diabła z minificationtym? : s / :(
Scott Fraley,

Tak. Dlaczego programiści w 2019 r. Minimalizują css i javascript, ale budują API takie jak Angular i inni, którzy wysyłają megabajty niepotrzebnego ECMAScript (JavaScript) do klientów? Kiedyś wysyłaliśmy mniej kodu lub skompresowanego kodu do klientów o ograniczonej przepustowości, aby mogli uzyskać kod, gdy byli ograniczeni przepustowością .... tj. Modemami 14k baud. Nadchodzi 5G, więc kompresja kodu, taka jak kompresja gif lub minimalizacja, nie jest potrzebna. Mimo to cofnęliśmy się, wysyłając w rezultacie ogromne ilości skryptów do klientów. Po co więc cokolwiek minimalizować?
Stokely,

1
Ponieważ powinniśmy przesyłać tak mało przesyłek, jak to możliwe? Z pewnością staram się ograniczyć to do minimum.
Scott Fraley

0

Zrobiłem wszystko, co konieczne, aby dodać pakietowanie do sieci MVC 3 (jestem nowy w istniejącym rozwiązaniu). Styles.Rendernie działało dla mnie. W końcu odkryłem, że po prostu brakuje mi jelita grubego. Na stronie wzorcowej: <%: Styles.Render("~/Content/Css") %> Nadal jestem zdezorientowany, dlaczego (na tej samej stronie) <% Html.RenderPartial("LogOnUserControl"); %>działa bez dwukropka.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.