ASP.NET MVC загрузка CSS на основе контроллера - PullRequest
2 голосов
/ 19 марта 2010

На моем сайте у меня есть специальные CSS-файлы для контроллера в дополнение к моему основному CSS-файлу.Например,

CSS/
    Prodcuts/
             product.css
             ...
    Blog/
        blog.css
        ...
    masterStyle.css

Где masterStyle.css - это основной файл CSS.Что я хочу сделать, так это когда пользователь нажимает http://www.example.com/Products/, только mySite.css и все CSS-файлы в разделе «Продукты» включаются.Каков наилучший способ сделать это?

Ответы [ 4 ]

1 голос
/ 20 марта 2010

На вашей главной странице создайте следующий заполнитель внутри раздела <head>.

Мастер страницы

<asp:ContentPlaceHolder ID="HeadContent" runat="server"></asp:ContentPlaceHolder>

Затем внутри вашегоВ контроллере вы должны определить список файлов .css, которые будут использоваться, а также создать строку, которую представления могут использовать, чтобы легко разместить содержимое внутри страницы.Вот то, что я использовал.

Контроллер

public ActionResult Index()
{
    ViewData["Message"] = "Welcome to ASP.NET MVC!";

    List<string> css = new List<string>()
    {
        "one.css",
        "two.css",
        "three.css",
        "four.css"
    };

    IList<string> cssTags = new List<string>();

    StringBuilder cssTag = new StringBuilder();

    css.ForEach(c =>
        {
            cssTag.AppendLine(string.Format(@"<link href=""{0}"" rel=""stylesheet"" type=""text/css"" />", HttpUtility.HtmlEncode(c)));
        });

    ViewData["css"] = cssTag.ToString();

    return View();
}

Тогда внутри вашего взгляда просто поместите следующее

Вид

<asp:Content ID="headContent" ContentPlaceHolderID="HeadContent" runat="server">
<%= ViewData["css"] %>
</asp:Content>

Причина, по которой я строю список .css внутри контроллера, а затем создаю строку, используемую представлением, заключается в том, что я хочу, чтобы представления были как можно более глупыми.Можно было бы просто поместить список файлов .css в саму ViewData, а затем позволить представлению выполнить цикл и создать тег link, но лучше сделать это в другом месте, если это возможно.

Другой вариант использования ViewData - использовать строго типизированное представление со строковым свойством, а затем представление просто отбирает этого парня.Лично я не пользуюсь ViewData словарем.Вместо этого все мои взгляды строго напечатаны.

0 голосов
/ 19 марта 2010

Простой способ - добавить «custom.css» в каждый подкаталог View и использовать его на главной странице:

    <link href="/<%= ViewContext.RouteData.Values["Controller"]%>/custom.css" rel="stylesheet" type="text/css" />
0 голосов
/ 19 марта 2010

Поместите ContentPlaceHolder в раздел заголовка вашей главной страницы:

<head runat="server">
    <asp:ContentPlaceHolder ID="HeadContent" runat="server" />
</head>

Затем вы можете разместить ваши стили в этом контенте в представлениях (или создать другую главную страницу, которая наследует главную главную страницу для каждого контроллера):

<asp:Content ID="ContentHeadContent" ContentPlaceHolderID="HeadContent" runat="server">
    <link href="custom.css" rel="stylesheet" type="text/css" /> 
</asp:Content>
0 голосов
/ 19 марта 2010

Это интересная идея, я сделал быстрый поиск и нашел это, дайте мне знать, если это работает. Мне нравится идея.

ASP.NET MVC - элемент списка стилей на основе контроллера

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