2011-04-11 52 views
1

主要有以下几种布局和视图:ASP.NET 3:什么是知道使用什么视图和布局的方法?

_GlobalLayout.cshtml

_SubLoyout.cshtml

SomePage.cshtml

_GlobalLayout.cshtml我想所有的列表使用布局和当前视图名称。

例如,在_GlobalLayout.cshtml

<html> 
<head> 
    @Html.Some_method_that_will_know_about_used_layouts_and_view(); 
</head> 
<body> 
    @RenderBody(); 
</body> 
</html> 

Some_method_that_will_know_about_used_layouts_and_view将返回使用约使用布局和使用视图信息的某些内容。

我该如何实现这种方法?

+0

你究竟是什么意思? – SLaks 2011-04-11 16:44:26

+0

在这个方法中,我想得到一个像这样的列表: – 2011-04-11 16:45:49

+0

_GlobalLayout.cshtml _SubLoyout.cshtml SomePage.cshtml – 2011-04-11 16:46:30

回答

2

当前视图的概念没有意义。您尚未呈现正文(@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 

然后:

+0

它确实有道理。当前视图是输出/部分堆栈中的第二个视图。此外,它的主体已经呈现(对'_tempWriter') – SLaks 2011-04-11 19:46:14

+1

这仅仅是一个Razor实现细节,我们在构建MVC应用程序时不应该依赖它。 – 2011-04-11 20:25:32

+0

问:你为什么需要这个,你想用它达到什么目的? 答:在我的情况中,我实现了一个基本的CMS,我需要在最终视图中加载一些页面内容,并理想地实现这个嵌套的“主”模板,以便知道要加载的模板内容。没有办法获得父级布局名称? – 2012-07-02 09:44:47

0

你可以在PagesController设定值

@If ViewData("NeedToLoadOtherTemplates") Then 
    @loadTheOtherStuff 
End If 

您可以为需要每增加模板添加视图的数据。

相关问题