Как применить класс CSS к тегу тела с помощью файлов C # - PullRequest
1 голос
/ 17 февраля 2012

Я использую ASP.NET MVC3 с движком бритвы. Я хочу применить класс css к тегу body в соответствии с вызовом страницы.Я хочу добавить имя класса на дочерней странице, и это повлияет на страницу макета, которая имеет тег body.и не хочу использовать jquery, потому что он выполняется после рендеринга страницы.Как я могу это сделать?

Ответы [ 4 ]

6 голосов
/ 27 марта 2012

Хотя у вас может быть полный контроль над HTML, решение было тем, что было необходимо, так что вот один; -)

На странице _layout.cshtml

<body class="@RenderSection("BodyClass", false)">

Это будет искать раздел на всех дочерних страницах, но говорит, что не волнуйтесь, если он не может найти один

Тогда в ваших дочерних представлениях просто сделайте это

@section BodyClass {productList}

Держите его в одной строке, и тогда выведенный HTML-код будет выглядеть хорошо, также вы можете затем создать имена классов.

@section BodyClass {productList generic}

Эта идея идеально подходит для кода, специфичного для DOM-Ready, почему бы не оформить заказ http://paulirish.com/2009/markup-based-unobtrusive-comprehensive-dom-ready-execution/

Или моя расширенная версия здесь https://github.com/AaronLayton/H5BP-Core

Мой способ позволяет вам создавать код, специфичный для каждой страницы, но позволяет хранить весь Javascript на отдельных страницах, чтобы каждая страница стала легко управляемой. Последний шаг - объединить и минимизировать все JS в 1 файл; -)

2 голосов
/ 20 февраля 2013

Ответ Аарона, приведенный выше, отлично работает для MVC 3, но я обнаружил, что MVC 4 дросселирует однострочный оператор секции:

@section BodyClass {productList}

Вместо этого вам нужно использовать:

@section BodyClass {@("productList")}
1 голос
/ 17 февраля 2012

Прежде всего, функция JQuery .ready выполняется после того, как DOM становится доступным, так что это оптимальный момент для начала взаимодействия с элементами вашей страницы.(http://api.jquery.com/ready/) Если вы испытываете поведение, которое приводит к мерцанию стилей, вы можете не применять display: none к элементу body и удалять его после применения класса css.

но если вы действительно не хотите использовать jQuery, вам следует подумать о создании переменной для хранения имени вашего класса css как части модели представления, которую ваш контроллер будет отправлять в Views, или при использовании ViewBag.CssClass, который должен быть объявлен вкаждое из действий вашего контроллера (или в методе OnActionExecuting базового контроллера.

Здесь следует рассмотреть понимание и следование шаблону MVC, в котором необходимо разделить View и Business Logic. Поэтому, на мой взгляд, вам следует избегать вовлечения контроллеров впросмотреть процесс строительства.

0 голосов
/ 12 сентября 2017

Гораздо проще просто поместить в основной макет следующее:

<body class="@ViewBag.BodyClass">

Затем на страницах контента введите:

@{
    ViewBag.BodyClass = "myClass";
}

Проблема решена!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...