Asp.net mvc 根据控制器有条件地在布局中包括样式表';姓名

Asp.net mvc 根据控制器有条件地在布局中包括样式表';姓名,asp.net-mvc,Asp.net Mvc,我正在学习ASP.NETMVC3框架。在我的布局页面(\u layout.cshtml)中,我希望根据控制器的名称有条件地包括一些CSS样式表。如何执行此操作?您可以使用以下属性获取当前控制器名称: ViewContext.RouteData.GetRequiredString("controller") 因此,根据其值,您可以包括或不包括样式表: @if (ViewContext.RouteData.GetRequiredString("controller") == "somecontro

我正在学习ASP.NETMVC3框架。在我的布局页面(
\u layout.cshtml
)中,我希望根据控制器的名称有条件地包括一些CSS样式表。如何执行此操作?

您可以使用以下属性获取当前控制器名称:

ViewContext.RouteData.GetRequiredString("controller")
因此,根据其值,您可以包括或不包括样式表:

@if (ViewContext.RouteData.GetRequiredString("controller") == "somecontrollername")
{
    <link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />
}
简单地说,在布局上:

@Html.MyCss()

我会使用不同的方法。改为定义基本控制器并定义方法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)中使用它。

Darin明确回答了您的问题,但另一种选择是使用控制器名称作为页面上某个HTML元素的id,这将为您提供定制控制器级视图的灵活性,但将CSS保存在一个文件中

<body id="<%=ViewContext.RouteData.GetRequiredString("controller").ToLower() %>">
    ... content here
</body>

... 满足于此

我为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);
    }

}
要在您的_布局中使用它:

@if(ViewContext.GetControllerName() == "MyControllerName")
{
  //load my css here
}

您还可以将控制器名称作为参数传递,并使此扩展方法返回bool。

不要这样做。。。如果你有一个单一的css文件在一个静态域中为你的整个网站提供一个高缓存,你的浏览器将发出更少的请求,并且已经有了任何页面所需的代码。看看这些源代码,它是一个单一的
css
文件。(也是网站的单一js)
@if(ViewContext.GetControllerName() == "MyControllerName")
{
  //load my css here
}