Stili. Rendering in MVC4


Risposte:


453

Sta chiamando i file inclusi in quel particolare bundle che è dichiarato all'interno della BundleConfigclasse nella App_Startcartella.

In quel caso particolare La chiamata a @Styles.Render("~/Content/css")sta chiamando "~ / Content / site.css".

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

22
Una cosa da sapere è che non aggiungerà un file .css che è già ridotto a icona nel bundle. Esempio: non funziona con bootstrap.min.js, ma solo con bootstrap.js. Spero che questo possa aiutare gli altri.
codea,

5
Si tratta di stili, non di script. Se vuoi usare bootstrap.min.js, crea un pacchetto come questo: bundles.Add (new ScriptBundle ("~ / bundles / bootstrap"). Includi ("~ / Scripts / bootstrap.min.js"));
Xcalibur37,

1
@codea Non sono sicuro di quale sia il tuo set-up, ma per impostazione predefinita il bundler prenderà il *.min.*controllo dei *.*file.
skmasq,

@skmasq, al momento della stesura di queste righe, utilizzavo VS2013. Le cose potrebbero essere cambiate fino ad ora. Grazie per
averlo

Non capisco .... perché fare tutto il possibile per creare bundle e aggiungere quei percorsi a queste folli classi in MVC quando puoi semplicemente aggiungere un CSS <link> al file nella tua pagina web? Se aggiungi tutti i tuoi collegamenti CSS ai tuoi fogli di stile, ad esempio un file di layout o una vista parziale, puoi gestirli anche in un unico posto. Questo è anche un cattivo progetto per codificare percorsi di stile come quello, poiché non è più possibile creare skin CSS che era lo scopo del sistema CSS quando è stato progettato 20 anni fa.
Stokely,

34

Fai attenzione alla distinzione tra maiuscole e minuscole. Se hai un file

/Content/bootstrap.css

e reindirizzi nel tuo Bundle.config a

.Include ( "~ / Contenuti / Bootstrap.css")

non caricherà il CSS.


Inoltre: la seconda inclusione è scritta diversamente.
Dan Esparza,

1
c'è supporto anche per sass / less-files?
Manticore,

12

Un po 'in ritardo alla festa. Ma sembra che nessuno abbia menzionato il
raggruppamento e la minificazione di StyleBundle, quindi ...

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

chiama Application_Start():

BundleConfig.RegisterBundles(BundleTable.Bundles);            

che a sua volta chiama

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

RegisterBundles()combina e minimizza efficacemente bootstrap.csse Site.css
in un singolo file,

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

Ma ..

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

solo quando debug è impostato su falsein Web.config.
Altrimenti bootstrap.csse Site.csssarà servito individualmente.
Non raggruppato né minimizzato:

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

0

src="@url.content("~/Folderpath/*.css")" dovrebbe rendere gli stili


0

Come definito in App_start.BundleConfig, è solo una chiamata

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

Non succede nulla anche se rimuovi quella sezione.


0

Polo Non userei i bundle in MVC per diversi motivi. Non funziona nel tuo caso perché devi impostare una classe BundleConfig personalizzata nella cartella Apps_Start. Questo non ha senso quando puoi semplicemente aggiungere uno stile nella testa del tuo html in questo modo:

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

Puoi anche aggiungerli a un Layout.cshtml o a una classe parziale richiamata da tutte le tue visualizzazioni e rilasciata in ogni pagina. Se i tuoi stili cambiano, puoi facilmente cambiare il nome e il percorso senza dover ricompilare.

L'aggiunta di collegamenti hardcoded ai CSS in una classe interrompe anche l'intero scopo della separazione dell'interfaccia utente e del design dal modello dell'applicazione. Inoltre, non vuoi che i percorsi dei fogli di stile codificati siano gestiti in c # perché non puoi più creare "skin" o modelli di stile separati per dire diversi dispositivi, temi, ecc. In questo modo:

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

Usando questo sistema e Razor ora puoi cambiare Skin Path da un database o dalle impostazioni dell'utente e cambiare l'intero design del tuo sito web semplicemente cambiando il percorso in modo dinamico.

Lo scopo del CSS 15 anni fa era quello di sviluppare "skin" di fogli di stile controllati dall'utente e controllati dall'applicazione per i siti in modo da poter cambiare l'aspetto dell'interfaccia utente e sentirti separato dall'applicazione e riutilizzare il contenuto indipendentemente dalla struttura dei dati. .... ad esempio una versione stampabile, mobile, versione audio, raw xml, ecc.

Tornando ora a questo sistema di percorsi "vecchio stile" e codificato usando classi C #, stili rigidi come Bootstrap e fondendo i temi dei siti con il codice dell'applicazione, siamo tornati indietro nel tempo alla creazione dei siti Web nel 1998.


1
Quindi, diamine con minificationallora? : s / :(
Scott Fraley,

Sì. Perché gli sviluppatori nel 2019 riducono al minimo CSS e JavaScript, ma poi creano API come Angular e altre che inviano megabyte di ECMAScript (Javascript) non necessari ai client? Avevamo l'abitudine di inviare meno codice o codice compresso ai clienti con larghezza di banda limitata in modo che potessero ottenere il codice quando erano vincolati dalla larghezza di banda .... vale a dire modem da 14k baud. Abbiamo 5G in arrivo, quindi non è necessaria la compressione del codice come compressione gif o minificazione. Tuttavia, siamo tornati indietro inviando enormi quantità di script ai clienti di conseguenza. Quindi perché minimizzare qualcosa?
Stokely,

1
Perché dovremmo inviare il meno possibile via cavo? Cerco certamente di ridurre al minimo le cose.
Scott Fraley,

0

Ho fatto tutto il necessario per aggiungere il raggruppamento a un Web MVC 3 (sono nuovo alla soluzione esistente). Styles.Rendernon ha funzionato per me. Alla fine ho scoperto che mi mancava semplicemente un colon. In una pagina principale: <%: Styles.Render("~/Content/Css") %> sono ancora confuso sul perché (sulla stessa pagina) <% Html.RenderPartial("LogOnUserControl"); %>funziona senza i due punti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.