我學習ASP.NET MVC 3框架。在我的佈局頁(_Layout.cshtml
),我想有條件包括取決於控制器的名稱一些CSS樣式表。我怎麼做?佈局有條件包括樣式取決於控制器的名字
3
A
回答
5
你可以使用下面的屬性獲取當前的控制器名:
ViewContext.RouteData.GetRequiredString("controller")
因此,基於它的價值,你可以包括或不樣式表:
@if (ViewContext.RouteData.GetRequiredString("controller") == "somecontrollername")
{
<link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />
}
或者使用自定義的助手:
public static class CssExtensions
{
public static IHtmlString MyCss(this HtmlHelper html)
{
var currentController = html.ViewContext.RouteData.GetRequiredString("controller");
if (currentController != "somecontrollername")
{
return MvcHtmlString.Empty;
}
var urlHelper = new UrlHelper(html.ViewContext.RequestContext);
var link = new TagBuilder("link");
link.Attributes["rel"] = "stylesheet";
link.Attributes["type"] = "text/css";
link.Attributes["href"] = urlHelper.Content("~/Content/Site.css");
return MvcHtmlString.Create(link.ToString(TagRenderMode.SelfClosing));
}
}
而且在佈局上簡單:
@Html.MyCss()
2
我會用不同的方法。定義基本控制器代替,並定義方法SetStyleSheet喜歡:
public abstract class BaseController : Controller
{
protected override void Intialize(RequestContext requestContext)
{
base.Initialize(requestContext);
SetStyleSheet();
}
protected virtual void SetStyleSheet()
{ }
}
在派生類可以覆蓋SetStyleSheet
設置類似ViewData["styleSheet"]
並在母版頁(_Layout.cshtml)使用它的例子。
1
達林肯定回答了你的問題,而是一個替代方法是使用控制器的名稱一些HTML元素的網頁上的ID,這將讓你自定義控制器級視圖的靈活性,但保持你的CSS在一個文件中。
<body id="<%=ViewContext.RouteData.GetRequiredString("controller").ToLower() %>">
... content here
</body>
0
我做了另外一個擴展方法ControllerContext因爲ViewContext時已位於來源於它,你可以直接打電話給你的方法。
例如:
public static class ControllerContextExtensions
{
public static string GetControllerName(this ControllerContext helper)
{
if (helper.Controller == null)
{
return string.Empty;
}
string[] fullControllerNames = helper.Controller.ToString().Split('.');
return fullControllerNames[fullControllerNames.Length-1].Replace("Controller",string.Empty);
}
}
而在你_layout使用此:
@if(ViewContext.GetControllerName() == "MyControllerName")
{
//load my css here
}
你也可以通過在控制器的名稱作爲參數,使這個擴展方法返回一個布爾值。
相關問題
- 1. 的Javascript包括控制取決於
- 2. 取決於某些條件的WPF控件的動態佈局
- 3. Symfony包括基於控制器的資產(樣式表/ js)
- 4. 有條件地包括取決於iOS版本的標題
- 5. Android的佈局包括沒有佈局
- 6. Liferay:有條件包括取決於語言
- 7. JSF outputtext條件顯示/樣式。取決於條件
- 8. 包括取決於體類
- 9. Magento中的條件佈局塊取決於是否已登錄?
- 10. Angular $ routeChangeSuccess - 競爭條件取決於控制器定義?
- 11. JMeter的包括控制器
- 12. 包括XML佈局
- 13. 上包括佈局
- 14. CodeIgniter:用於獲取包括圖像的值的控制器
- 15. 更改ListView佈局背景顏色取決於特殊條件
- 16. 從html中提取所有CSS樣式(不包括條件註釋中包含的樣式)
- 17. 從紅寶石控制器有條件地設置CSS樣式
- 18. 包括佈局覆蓋父佈局
- 19. 有條件的Autotools包括
- 20. AngularJS指定一個控制器的方式取決於另一個控制器
- 21. 取決於條件
- 22. 取決於條件
- 23. 包含視圖+控制器+樣式
- 24. WPF - MVVM - 有條件包括用戶控制,查看
- 25. MVC控制器來佈局?
- 26. Rails佈局渲染與控制器條件
- 27. 樣式取決於主機
- 28. 有多個定位佈局包括
- 29. ng-model取決於控制器
- 30. Laravel 4控制器文件名變化造成包括錯誤
不要這樣......如果你有高緩存您的瀏覽器會讓更少的請求,並已經將有必要的任何頁面的代碼的靜態域爲您的整個網站的一個CSS文件。看看SO源代碼,這是一個'css'文件。 (也是一個單一的網站js) – BrunoLM 2011-05-02 19:43:35