Styles.Render dans MVC4


Réponses:


453

Il appelle les fichiers inclus dans ce bundle particulier qui est déclaré dans la BundleConfigclasse du App_Startdossier.

Dans ce cas particulier, l'appel à @Styles.Render("~/Content/css")appelle "~ / Content / site.css".

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

22
Une chose à savoir est qu'il n'ajoutera pas de fichier .css déjà réduit au bundle. Exemple: cela ne fonctionne pas avec bootstrap.min.js, seulement avec bootstrap.js. J'espère que cela peut aider les autres.
codea

5
Il s'agit de styles, pas de scripts. Si vous souhaitez utiliser bootstrap.min.js, créez simplement un bundle comme celui-ci: bundles.Add (new ScriptBundle ("~ / bundles / bootstrap"). Include ("~ / Scripts / bootstrap.min.js"));
Xcalibur37

1
@codea Je ne sais pas quelle est votre configuration, mais par défaut, le regroupeur prendra en *.min.*charge les *.*fichiers.
skmasq

@skmasq, au moment d'écrire ces lignes, j'utilisais VS2013. Les choses ont peut-être changé jusqu'à présent. Merci d'avoir mentionné cela :)
codea

Je ne comprends pas .... pourquoi se donner la peine de créer des bundles et d'ajouter ces chemins à ces classes folles dans MVC alors que vous pouvez simplement ajouter un <link> CSS au fichier de votre page Web? Si vous ajoutez tous vos liens CSS à vos feuilles de style dans un fichier de mise en page ou une vue partielle, vous pouvez également les gérer en un seul endroit. C'est aussi une mauvaise conception pour les chemins de style de code dur comme ça, car vous ne pouvez plus créer d'habillages CSS, ce qui était tout le but du système CSS lorsqu'il était conçu il y a 20 ans.
Stokely

34

Faites attention à la sensibilité à la casse. Si vous avez un fichier

/Content/bootstrap.css

et vous redirigez dans votre Bundle.config vers

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

il ne chargera pas le css.


Aussi: Le deuxième include est orthographié différemment.
Dan Esparza

1
y a-t-il également un support pour les fichiers sass / less?
Manticore

12

Un peu tard pour la fête. Mais il semble que personne n'ait mentionné le
regroupement et la minification de StyleBundle, alors ..

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

appelle Application_Start():

BundleConfig.RegisterBundles(BundleTable.Bundles);            

qui à son tour appelle

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

RegisterBundles()combine et réduit efficacement bootstrap.csset Site.css
en un seul fichier,

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

Mais ..

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

uniquement lorsque debug est défini sur falsein Web.config.
Dans le cas contraire bootstrap.csset Site.csssera servi individuellement.
Ni groupé, ni minifié:

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

0

src="@url.content("~/Folderpath/*.css")" devrait rendre les styles


0

Comme défini dans App_start.BundleConfig, il s'agit simplement d'appeler

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

Rien ne se passe même si vous supprimez cette section.


0

Polo Je n'utiliserais pas de bundles dans MVC pour plusieurs raisons. Cela ne fonctionne pas dans votre cas, car vous devez configurer une classe BundleConfig personnalisée dans votre dossier Apps_Start. Cela n'a aucun sens lorsque vous pouvez simplement ajouter un style dans la tête de votre html comme ceci:

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

Vous pouvez également les ajouter à une classe Layout.cshtml ou partielle appelée depuis toutes vos vues et déposée dans chaque page. Si vos styles changent, vous pouvez facilement changer le nom et le chemin sans avoir à recompiler.

L'ajout de liens codés en dur à CSS dans une classe rompt également avec le but de la séparation de l'interface utilisateur et de la conception du modèle d'application. Vous ne voulez pas non plus que les chemins de feuille de style codés en dur soient gérés en c # car vous ne pouvez plus créer de "skins" ou de modèles de style séparés pour différents appareils, thèmes, etc., comme ceci:

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

En utilisant ce système et Razor, vous pouvez désormais désactiver le Skin Path à partir d'une base de données ou d'un paramètre utilisateur et modifier la conception globale de votre site Web en changeant simplement le chemin de manière dynamique.

Il y a 15 ans, CSS avait pour objectif de développer des "habillages" de feuilles de style contrôlés par l'utilisateur et par l'application pour les sites afin que vous puissiez changer l'apparence de l'interface utilisateur séparément de l'application et réutiliser le contenu indépendamment de la structure des données. .... par exemple une version imprimable, mobile, version audio, xml brut, etc.

En revenant maintenant à ce système de chemin d'accès "à l'ancienne", codé en dur utilisant des classes C #, des styles rigides comme Bootstrap, et en fusionnant les thèmes des sites avec le code d'application, nous sommes revenus à la façon dont les sites Web ont été construits en 1998.


1
Alors, pourquoi pas minification? : s / :(
Scott Fraley

Oui. Pourquoi les développeurs en 2019 minimisent-ils le CSS et le Javascript mais construisent-ils ensuite des API comme Angular et d'autres qui envoient des mégaoctets d'ECMAScript (Javascript) inutiles aux clients? Nous avions l'habitude d'envoyer moins de code ou de code compressé aux clients ayant une bande passante limitée afin qu'ils puissent obtenir le code lorsqu'ils étaient limités par la bande passante .... c'est-à-dire les modems 14k bauds. Nous avons 5G à venir donc la compression de code comme la compression gif ou la minification n'est pas nécessaire. Pourtant, nous avons reculé en envoyant d'énormes mandats de scripts aux clients. Alors pourquoi minimiser quoi que ce soit?
Stokely

1
Parce que nous devrions envoyer aussi peu que possible sur le fil? J'essaie certainement de garder les choses au minimum.
Scott Fraley

0

J'ai fait toutes les choses nécessaires pour ajouter le bundling à un site Web MVC 3 (je suis nouveau dans la solution existante). Styles.Rendern'a pas fonctionné pour moi. J'ai finalement découvert qu'il me manquait simplement deux points. Dans une page maître: <%: Styles.Render("~/Content/Css") %> je ne comprends toujours pas pourquoi (sur la même page) <% Html.RenderPartial("LogOnUserControl"); %>fonctionne sans les deux-points.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.