2012-02-17 42 views
1

我正在使用帶有剃鬚刀引擎的ASP.NET MVC3。我想根據頁面調用在body標籤上應用css類。 我想在子頁面添加類名,它會影響具有body標籤的佈局頁面。 並且不想使用jquery,因爲它在頁面呈現後執行。 我該怎麼做?如何使用C#文件在body標籤上應用css類

回答

1

首先,jQuery的.ready函數在DOM可用後執行,因此它是開始與頁面元素進行交互的最佳時機。 (http://api.jquery.com/ready/)如果您遇到導致樣式「閃爍」的行爲,則可能無法將display:none應用於body元素,並在應用了css類後將其刪除。

但是如果你真的不想使用jQuery,你應該考慮製作一個變量來保存你的css類名作爲你的控制器發送給Views的viewmodel的一部分,或者使用ViewBag.CssClass在你的每個控制器的動作中(或者在基本控制器的OnActionExecuting方法中聲明)

這裏要考慮的事情是理解和遵循MVC模式,其中視圖和業務邏輯應該被分開,所以我認爲你應該避免涉及控制器在視圖中構建過程

6

雖然您可能完全控制了HTML,但解決方案是需要的,因此這裏是一個;-)

在_layout.cshtml頁面

<body class="@RenderSection("BodyClass", false)"> 

這將尋找在所有子頁面的部分,但如果它無法找到你的孩子一個視圖

然後說不用擔心只要做到這一點

@section BodyClass {productList} 

保持在一行,然後輸出的HTML看起來很好,也可以建立類名稱。

@section BodyClass {productList generic} 

這種想法去完善與DOM就緒頁特定的代碼,爲什麼不籤 http://paulirish.com/2009/markup-based-unobtrusive-comprehensive-dom-ready-execution/

還是我在這裏擴展版本 https://github.com/AaronLayton/H5BP-Core

我的方式讓你做網頁的特定代碼,但允許你將所有的Javascript保存在不同的頁面中,這樣每個頁面都可以輕鬆管理。最後一步將是串聯和所有的JS再壓縮至1個文件;-)

+0

我已經使用了這個方法一段時間,但它不喜歡MVC 4中的單行節語句。你是否也看到過MVC 4?有任何想法嗎? – 2013-02-19 20:17:28

+0

我剛找到答案。我會在下面發佈。 – 2013-02-19 20:41:38

2

阿龍的回答上面MVC 3的偉大工程,但我發現,MVC 4,當單線上部分的語句扼流圈:

@section BodyClass {productList} 

相反,你需要使用:

@section BodyClass {@("productList")} 
0

這是很容易簡單地把你的主要佈局以下

<body class="@ViewBag.BodyClass"> 

然後在內容頁的說:

@{ 
    ViewBag.BodyClass = "myClass"; 
} 

問題解決了!

相關問題