2010-03-19 39 views
2

在我的网站中,除了我的主CSS文件外,我还有控制器特定的CSS文件。例如,基于控制器的ASP.NET MVC加载CSS

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

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

回答

0

在你的母版页里面创建的<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(); 
} 

内。然后你的看法只需将follwing

查看

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

为什么我建立的控制器内的.css名单的原因然后创建一个视图使用的字符串,因为我想要视图b尽可能愚蠢。一个选项是将.css文件列表放入ViewData本身,然后让视图执行循环并创建link标记,但如果可能的话,最好在别处执行。

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

0

简单的方式可以是一个“custom.css”添加到每个视图的子目录,使用这个母版页:在你的母版页的head部分

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

广场的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>