我学习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. 有条件地包括取决于iOS版本的标题
- 2. Liferay:有条件包括取决于语言
- 3. JSF outputtext条件显示/样式。取决于条件
- 4. 包括XML布局
- 5. 更改ListView布局背景颜色取决于特殊条件
- 6. CodeIgniter:用于获取包括图像的值的控制器
- 7. 从红宝石控制器有条件地设置CSS样式
- 8. 包括布局覆盖父布局
- 9. 有条件的Autotools包括
- 10. 取决于条件
- 11. 取决于条件
- 12. 包含视图+控制器+样式
- 13. MVC控制器来布局?
- 14. Rails布局渲染与控制器条件
- 15. 使用空布局包括
- 16. ng-model取决于控制器
- 17. Android包括布局文件(参考ID)
- 18. 包括php文件更改布局?
- 19. 条件包括EF6解决方法
- 20. 获取完整的铁路控制器名称,包括命名空间
- 21. 如何包括取决于request.domain
- 22. PHP包括取决于帐户
- 23. 流动式fullcalendar事件?不可能的布局? PIC包括
- 24. 条件包括
- 25. 从excel中读取数据,包括应用于它的样式
- 26. 有条件查看/布局
- 27. Laravel 5如何动态地包括外部CSS和JS文件取决于控制器/路线
- 28. Buildbot master.cfg有条件取决于属性
- 29. Sublime Text 2双引号字体样式取决于文件扩展名吗?
- 30. 一键式ASP.NET web部署包括先决条件?
不要这样......如果你有高缓存您的浏览器会让更少的请求,并已经将有必要的任何页面的代码的静态域为您的整个网站的一个CSS文件。看看SO源代码,这是一个'css'文件。 (也是一个单一的网站js) – BrunoLM 2011-05-02 19:43:35