2010-11-02 97 views
151

我對我的意見使用_viewstart.cshtml to automagically assign the same Razor Layout使用_viewstart.cshtml和部分Razor視圖的正確方法?

它在我的瀏覽文件夾的根,看起來像這樣死簡單的文件:

@{ 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
} 

這是不是添加@Layout指令,每一個單一的視圖更幹。

然而,這造成了剃刀部分意見的一個問題,因爲它們運行_viewstart.cshtml的內容,因此錯誤地分配自己的佈局,這使得它們,嗯,不再分。

下面是一個假設項目,顯示_viewstart.cshtml文件,共享_layout.shtml文件和部分視圖(「AnonBar.cshtml」)。

Example project structure

當前,我得到解決這個問題的方法是添加以下行至每一個局部視圖:

@{ 
    Layout = ""; 
} 

這似乎是錯誤的方式來表示一個視圖作爲局部在剃刀。 (請注意,與Web窗體視圖引擎,文件擴展名是相同的部分觀點。)

我考慮其他的選擇,但那些更糟糕:

  • 把所有的局部視圖到公共文件夾,所以他們可以共享一個共同的_viewstart.cshtml。這打破了與他們的控制器在同一個文件夾中的慣例。
  • 不使用局部視圖。

這個東西還在被Razor視圖引擎團隊充實,還是我錯過了一個基本概念?

+3

對不起,對於文件名旁邊的圖標是什麼? :)某種源代碼控制權? – Alex 2011-11-10 10:43:20

+6

@jitbit:VisualSVN – erict 2011-11-15 20:20:54

回答

232

如果你從你的控制器(而不是return View()return PartialView(),那麼_viewstart.cshtml將不會執行。

+6

Aha,不知道'PartialViewResult'類。那是我需要的。 – Portman 2010-11-02 22:31:35

+6

作爲後續工作,我發現我需要**也**明確設置操作方法的返回類型爲'PartialViewResult'而不是通常的'ActionResult'。 – Portman 2010-11-03 21:55:39

+2

@Portman當action方法的返回類型不是'ActionResult'時,你會看到問題嗎?我很驚訝這是一個問題,因爲在這種情況下MVC運行時不應該有任何不同的行爲(即只要action方法返回的類型是ActionResult或任何派生它的類都應該可以工作)。 – marcind 2010-11-03 22:37:38