Стилі. Візуалізація в MVC4


381

Як у .NET MVC4проекті @Styles.Renderпрацює?

Я маю на увазі, в @Styles.Render("~/Content/css")який файл він дзвонить?

У мене в файлі немає файлу або папки під назвою "css" Content.


11
дивіться мій asp.net/mvc/tutorials/mvc-4/bundling-and-minification Підручник
RickAndMSFT

Відповіді:


453

Він викликає файли, що входять до певного набору, який оголошується всередині BundleConfigкласу в App_Startпапці.

У цьому конкретному випадку заклик до @Styles.Render("~/Content/css")виклику "~ / Content / site.css".

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

22
Одне, що потрібно знати, це те, що він не додасть .css файл, який уже мінімізований до пакету. Приклад: він не працює з bootstrap.min.js, лише з bootstrap.js. Я сподіваюся, що це може допомогти іншим.
codea

5
Мова йде про стилі, а не сценарії. Якщо ви хочете використовувати bootstrap.min.js, просто створіть такий пакет: bundles.Add (новий ScriptBundle ("~ / bundles / bootstrap"). Включити ("~ / Scripts / bootstrap.min.js"));
Xcalibur37

1
@codea Я не впевнений , що ваш посаджений, але за замовчуванням пакетування буде приймати *.min.*більш *.*файли.
skmasq

@skmasq, на момент написання цих рядків я використовував VS2013. Речі, можливо, змінилися досі. Дякуємо, що
згадали

Я не розумію .... навіщо йти на всі проблеми зі створенням пакетів і додавати ці шляхи до цих божевільних класів у MVC, коли ви можете просто додати CSS <посилання> до файлу на своїй веб-сторінці? Якщо ви додасте всі свої посилання CSS до таблиць стилів, наприклад, файл макета або частковий вигляд, ви також можете керувати ними в одному простому місці. Це також поганий дизайн на жорстких кодових стилях, таких як, оскільки ви більше не можете створювати CSS-шкури, що було ціллю системи CSS, коли вона розроблялася 20 років тому.
Стоклей

34

Слідкуйте за чутливістю до справ. Якщо у вас є файл

/Content/bootstrap.css

і ви переспрямовуєте в своєму Bundle.config на

.Include ("~ / Зміст / Bootstrap.css")

він не завантажить css.


Також: Друга включена написана по-різному.
Дан Еспарза

1
Чи є також підтримка файлів sass / less?
Мантікор

12

Трохи запізнюємось на вечірку. Але, схоже , ніхто не обмовився
пакетування & мініфікація з StyleBundle, так що ..

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

дзвінки Application_Start():

BundleConfig.RegisterBundles(BundleTable.Bundles);            

що в свою чергу дзвонить

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

RegisterBundles()ефективно поєднує & мінімізує bootstrap.css & Site.css
в один файл,

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

Але ..

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

лише коли debug встановлено falseв Web.config.
Інакше bootstrap.css& Site.cssбуде подано окремо.
Не в комплекті та не мінімізовано:

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

0

src="@url.content("~/Folderpath/*.css")" повинні надавати стилі


0

Як визначено в App_start.BundleConfig, це просто дзвінок

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

Нічого не станеться, навіть якщо ви вилучите цей розділ.


0

Поло Я б не використовував пачки в MVC з декількох причин. У вашому випадку це не працює, оскільки вам потрібно встановити спеціальний клас BundleConfig у папці Apps_Start. Це не має сенсу, коли ви можете просто додати стиль в голову свого html так:

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

Ви також можете додати їх до Layout.cshtml або часткового класу, який викликається з усіх ваших переглядів і потрапляє на кожну сторінку. Якщо ваші стилі змінюються, ви можете легко змінити ім’я та шлях без необхідності перекомпілювати.

Додавання жорстко закодованих посилань до CSS у класі перерви з ціллю відокремлення інтерфейсу та дизайну від прикладної моделі. Ви також не хочете, щоб жорсткі кодовані стилі аркушів стилів керовані в c #, тому що ви більше не можете створювати "скіни" або окремі моделі стилів для, наприклад, різних пристроїв, тем тощо.:

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

За допомогою цієї системи та Razor тепер ви можете вимкнути Шлях шкіри з бази даних або налаштувань користувача та змінити весь дизайн вашого веб-сайту, просто динамічно змінивши шлях.

Вся мета CSS 15 років тому полягала у розробці як керованих користувачем, так і керованих додатками стилів "шкурок" для сайтів, щоб ви могли вимкнути зовнішній вигляд інтерфейсу користувача і відчути себе окремо від програми та змінити вміст незалежно від структури даних. .... наприклад, версія для друку, мобільна, аудіо-версія, необроблений XML тощо

Повернувшись назад до цієї «старомодної», жорстко кодованої системи шляхів із використанням класів C #, жорстких стилів, таких як Bootstrap, і об’єднавши теми сайтів з кодом програми, ми знову повернулися назад до того, як веб-сайти були побудовані в 1998 році.


1
Тож, хекнути з minificationтоді? : s / :(
Скотт

Так. Чому розробники в 2019 році мінімізують css та javascript, але потім будують API на зразок Angular та інші, які надсилають клієнтам мегабайти непотрібного ECMAScript (Javascript)? Ми раніше надсилали менше коду чи стислий код клієнтам з обмеженою пропускною здатністю, щоб вони могли отримати код, коли їх обмежувала пропускна здатність .... тобто модеми 14k бод. У нас 5G приходить так, що компресія коду, як стиснення gif або мінімізація, не потрібна. І все-таки ми повернулися назад, відправивши клієнтам величезні пачки сценаріїв. То навіщо мінімізувати що-небудь?
Stokely

1
Тому що ми повинні надсилати якнайменше по дроту, наскільки це можливо? Я, безумовно, намагаюся звести речі до мінімуму.
Скотт

0

Я зробив усе необхідне, щоб додати групування до мережі MVC 3 (я новачок у існуючому рішенні). Styles.Renderне працювало для мене. Нарешті я виявив, що мені просто не вистачає товстої кишки. На головній сторінці: <%: Styles.Render("~/Content/Css") %> Я все ще плутаюсь, чому (на одній сторінці) <% Html.RenderPartial("LogOnUserControl"); %>працює без двокрапки.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.