2011-04-11 35 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 

您可以爲需要每增加模板添加視圖的數據。

相關問題