2010-03-19 37 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>