Asp.net mvc ASP.NET3:了解使用哪些视图和布局的方法是什么?
有以下布局和视图: _GlobalLayout.cshtml _SubLoyout.cshtml SomePage.cshtml 在\u GlobalLayout.cshtml中,我想获得所有使用的布局和当前视图名称的列表 例如,在\u GlobalLayout.cshtml中:Asp.net mvc ASP.NET3:了解使用哪些视图和布局的方法是什么?,asp.net-mvc,razor,html-helper,webpage,Asp.net Mvc,Razor,Html Helper,Webpage,有以下布局和视图: _GlobalLayout.cshtml _SubLoyout.cshtml SomePage.cshtml 在\u GlobalLayout.cshtml中,我想获得所有使用的布局和当前视图名称的列表 例如,在\u GlobalLayout.cshtml中: <html> <head> @Html.Some_method_that_will_know_about_used_layouts_and_view(); </head>
<html>
<head>
@Html.Some_method_that_will_know_about_used_layouts_and_view();
</head>
<body>
@RenderBody();
</body>
</html>
@Html.一些你会知道的关于你使用的布局和视图()的方法;
@RenderBody();
Some\u-method\u将\u-known\u\u关于使用的布局和视图的信息将使用有关使用的布局和使用的视图的信息返回一些内容
如何实现此方法?当前视图的概念没有意义。您尚未渲染主体(
@RenderBody()
)并希望获得视图名称?您可以从ViewContext
获取当前操作和控制器:
@{
var currentController = ViewContext.RouteData.GetRequiredString("controller");
var currentAction = ViewContext.RouteData.GetRequiredString("action");
}
不过,主要的问题仍然是:您为什么需要它,以及您想用它实现什么?您可以在页面控制器中设置值:
Function YourPage() As ActionResult
ViewData("NeedToLoadOtherTemplates") = True
Return YourPage()
End Function
然后在模板视图中:
@If ViewData("NeedToLoadOtherTemplates") Then
@loadTheOtherStuff
End If
您可以为所需的每个额外模板添加视图数据。在方法中,我希望得到如下列表:_GlobalLayout.cshtml _SubLoyout.cshtml SomePage.cshtmlun幸运的是(令人惊讶的是),如果没有反射,这似乎是不可能的。这是有意义的。当前视图是输出/剖面堆栈中的第二个视图。此外,它的主体已经呈现(到
\u tempWriter
),这仅仅是一个Razor实现细节,我们在构建MVC应用程序时不应该依赖它。问:为什么您需要它,您想用它实现什么?答:在我的例子中,我正在实现一个基本的CMS,我需要在最终视图中加载一些页面内容,理想的情况是实现两个嵌套的“主”模板,这样我就知道要加载哪个模板内容。是否无法获取父布局名称?