Реализация CSS в качестве переменной на странице site.master в ASP.NET MVC3 - PullRequest
1 голос
/ 13 сентября 2011

Я реализую веб-приложение с использованием ASP.NET MVC3. В приложении я хочу добавить опцию переключения между CSS-файлами (для тем), основываясь на нажатии на некоторые ссылки. Я провел небольшое исследование и придумал следующее:

  1. Чтобы передать данные в site.master, хорошим решением является создание абстрактного контроллера и его наследование в другие контроллеры, для которых site.master используется в качестве шаблона, согласно этой статье: Передача данных для просмотра главных страниц
  2. Я могу передать сообщение viewbag по ссылке, которая управляет URL-адресом файла css, чтобы установить используемый текущий файл css, основываясь на коде, который, как я вижу, передается в сценарии в верхней части страницы site.master:

script src = "<%: Url.Content (" ~ / Scripts / jquery-1.5.1.min.js ")%>" type = "text / javascript"

Итак, я создал абстрактный контроллер ApplicationController, используя следующий метод:

public ApplicationController()
    {ViewBag.NewMessage = "../../Content/Site2.css";}

А в site.master я включил эту ссылку:

<link href="<%: (string) ViewBag.NewMessage %>" rel="stylesheet" type="text/css" />

Однако, похоже, это не работает, так как это интерпретируется как:

<link href="&lt;%: (string) ViewBag.NewMessage %>" rel="stylesheet" type="text/css" />

И только когда я удаляю кавычки:

<link href=<%: (string) ViewBag.NewMessage %> rel="stylesheet" type="text/css" />

правильно ли он интерпретируется (и веб-страница отображается с правильным css), за исключением того, что он нарушает стандарты HTML:

<link href=../../Content/Site2.css rel="stylesheet" type="text/css" />

Любое предложение о том, как решить эту проблему, или есть более элегантное решение, которое мне не хватает? Я собирался продолжить и реализовать переменные в ApplicationController, которые выбираются на основе ссылок, которые пользователь нажимает вверху страницы, для переключения между стилями CSS.

Спасибо!

1 Ответ

2 голосов
/ 13 сентября 2011

Убедитесь, что у вашего тега <head> нет runat="server".

После внесения этого изменения обязательно проверьте свой скрипт и теги css.Это изменение может нарушить пути, если вы используете ~/ для ссылки на корень приложения.Чтобы помочь с этим, используйте помощник Url.Content(...).

...