基于控制器的ASP.NET MVC加载CSS

时间:2010-03-19 18:18:54

标签: asp.net-mvc

在我的网站中,除了我的主css文件外,我还有控制器特定的CSS文件。例如

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

其中masterStyle.css是主css文件。我想要做的是当用户点击http://www.example.com/Products/时只有mySite.css,并且包含Products下的所有css文件。这样做的最佳方法是什么?

4 个答案:

答案 0 :(得分:1)

在您的母版页中,在<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标记,但如果可能的话,最好在其他地方执行。{ / p>

使用ViewData的另一个选择是使用带有字符串属性的强类型视图,然后视图就会选择该人。我个人不使用ViewData字典。相反,我的所有观点都是强类型的。

答案 1 :(得分:0)

这是一个有趣的想法,我做了一个快速搜索并找到了这个,让我知道它是否有效。我喜欢这个主意。

ASP.NET MVC - style list item based on controller

答案 2 :(得分:0)

简单的方法是在每个View子目录中添加“custom.css”,并在母版页中使用它:

    <link href="/<%= ViewContext.RouteData.Values["Controller"]%>/custom.css" rel="stylesheet" type="text/css" />

答案 3 :(得分:0)

将ContentPlaceHolder放在母版页的head部分中:

<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>