Asp.net mvc 根据控制器有条件地在布局中包括样式表';姓名
我正在学习ASP.NETMVC3框架。在我的布局页面(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
\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
}