代码之家  ›  专栏  ›  技术社区  ›  Scott

基于控件的css的asp.net mvc加载

  •  2
  • Scott  · 技术社区  · 16 年前

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

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

    其中masterstyle.css是主css文件。我想做的是当用户点击 http://www.example.com/Products/ 只包括mysite.css和产品下的所有css文件。做这个最好的方法是什么?

    4 回复  |  直到 16 年前
        1
  •  1
  •   Sayed Ibrahim Hashimi    16 年前

    在母版页中创建以下占位符 里面 这个 <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 但是如果可能的话,最好在别的地方做。

    使用的另一个选项 可视数据 就是使用一个带有字符串属性的强类型视图,然后视图就把那个家伙从中挑选出来。我个人不使用 可视数据 字典。相反,我所有的观点都是强类型的。

        2
  •  0
  •   Community Mohan Dere    9 年前

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

    ASP.NET MVC - style list item based on controller

        3
  •  0
  •   mrjoltcola    16 年前

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

        <link href="/<%= ViewContext.RouteData.Values["Controller"]%>/custom.css" rel="stylesheet" type="text/css" />
    
        4
  •  0
  •   LukLed    16 年前

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