2013-06-28 31 views
4

當我在視圖(而非主體)上使用@RenderBody時,我收到此消息Error: The file "~/Views/Shared/_Sistema.cshtml" cannot be requested directly because it calls the "RenderBody" method試圖在MVC4和Razor上使用兩個佈局頁面

我不理解它,因爲我是MVC的新手。

我可以做什麼?

謝謝!

+0

我今天正在搜索相同的情況下,如果你還沒有得到完美的答案,但試試這個http://stackoverflow.com/questions/5161380/how-do-i-specify-different-layouts-in-the -asp-net-mvc-3-razor-viewstart-file – Ali

回答

3

如果您在_Sistema.cshtml文件中使用Renderbody,然後使它作爲佈局頁。

然後添加另一個名爲MyPartial.cshtml的部分頁面,其佈局名稱爲_Sistema.cshtml。

Renderbody應該只在主頁面中。即佈局頁面。

所以你_Sistema.cshtml頁面應該只包含以下內容:

@RenderBody() 
@RenderSection("scripts", required: false) @*----Optional---*@ 

那麼你的新的部分頁面MyPartial.cshtml應包含以下內容:

@{ 
    Layout = "~/_Sistema.cshtml"; 
} 

然後使用您的部分頁面你的觀點如下:

@Html.Partial("MyPartial") 

希望它有幫助。

+0

是的,@納仁!謝謝。我用這種方法解決了它。 – GustavoAdolfo

+0

如果我的評論帶你回家,請將其標記爲答案,以便其他人也可以選擇相同的答案。謝謝。 – Naren

3

RenderBody僅適用於主人。此方法呈現不屬於任何特定部分的內容頁面的標記。如果您的視圖調用RenderBody,有兩種情況是可能的:

  1. 要麼這是一個錯誤,而且這個視圖不應該調用它。
  2. 或者這個視圖是一個主人,你應該改用一些其他的視圖繼承這個主人的佈局。
+0

非常感謝@安德烈。 好吧...我需要實現兩個不同的意見。有表單嗎? – GustavoAdolfo

+0

@GustavoAdolfo,只需在項目中添加兩個新視圖,並將其佈局設置爲您想要的主人,很可能是_Sistema.cshtml。我相信每個關於ASP.NET MVC大師教程都涵蓋了這種情況。 – Andrei

2

,你只需要與_ViewStart.cshtml

交互和使用,如果條件指定共享母校頁面的每個用戶組。 例如用戶爲admin,那麼用戶_Layout.cshtm其他合理利用_Layout2.cshtml

使用下面的代碼:

@{ 
    if(User.Identity.Name.ToLower()=="admin") { 
     Layout = "~/Views/Shared/_Layout2.cshtml"; 
    } 
    else { 
     Layout = "~/Views/Shared/_Layout.cshtml"; 
    } 
} 
+0

太棒了!大!這是一個好方法。謝謝。 – GustavoAdolfo

相關問題