我有一个样式表,我只想包含在MVC中特定区域的一部分的网页上。
我知道,默认情况下,您获得Areas/<Area Name>/Views/_ViewStart.cshtml
,但我想要为此区域呈现默认布局。 My Area的_ViewStart文件如下所示:
@ {
Layout = "~/Views/Shared/_Layout.cshtml";
}
我尝试在我的区域的_ViewStart文件中添加对Styles.Render("My Bundle Name")
的调用,但<link>
标记未显示在HTML源代码中。
我甚至创建了一个HtmlHelper
扩展方法,该方法从Route返回MVC中当前Area的名称,并包含样式表:
@if (Html.AreaName() == "MyArea")
{
@Styles.Render("...")
}
AreaName()
扩展方法的代码:
public static string AreaName<TModel>(this HtmlHelper<TModel> htmlHelper)
{
return htmlHelper.ViewContext.RouteData.Values["area"] as string;
}
但是这总是返回null。我甚至调试了应用程序,并在“Locals”调试器选项卡周围进行了调试。路径数据包含控制器,id和操作名称,但不包括区域名称,即使它在我的区域中呈现页面。
背景
我正在为这个区域创建一个可以安装在任何MVC应用程序上的NuGet包。在我们的组织中,我们获得了基于Bootstrap的基本HTML和CSS布局,因此布局有一些可预测性,但我想对冲我的赌注,并且只在从该区域渲染的页面上导入特定于我的区域的样式。 / p>
如何在MVC的某个区域中包含样式表,哪些区域不显示在其他区域中,或者没有区域的页面?
答案 0 :(得分:1)
您应该从Firefox version 41.0
这应该有用。
DataTokens
答案 1 :(得分:1)
这不是一个优雅的解决方案,但您可以在PageData
中设置ViewStart
值,然后在主Layout
页面中检查它:
_ViewStart.cshtml
@{
Layout = "~/Views/Shared/_Layout.cshtml";
PageData["AdditionalStyleBundle"] = "~/Content/myCSSBundle";
}
<强> _Layout.cshtml 强>
<head>
@if (PageData.ContainsKey("AdditionalStyleBundle"))
{
@Styles.Render(PageData["AdditionalStyleBundle"]);
}
</head>