我有一個MVC項目,需要有2個不同的視圖文件夾。一個在~/Views/
,另一個在~/Framework/Views/
。這是基於這樣的Razor視圖引擎創建自定義視圖引擎來完成:ASP.NET MVC:多視圖文件夾和_ViewStart.cshtml文件
public class MyViewEngine : RazorViewEngine
{
private static string[] AdditionalViewLocations = new[]{
"~/Framework/Views/{1}/{0}.cshtml",
"~/Framework/Views/{1}/{0}.vbhtml",
"~/Framework/Views/Shared/{0}.cshtml",
"~/Framework/Views/Shared/{0}.vbhtml"
};
public MyViewEngine()
{
base.PartialViewLocationFormats = base.PartialViewLocationFormats.Union(AdditionalViewLocations).ToArray();
base.ViewLocationFormats = base.ViewLocationFormats.Union(AdditionalViewLocations).ToArray();
base.MasterLocationFormats = base.MasterLocationFormats.Union(AdditionalViewLocations).ToArray();
}
}
的問題是,我想使用一個不同的_ViewStart.cshtml文件在每個2個瀏覽文件夾(即~/Views/_ViewStart.cshtml
爲在~/Views/
文件夾中找到的視圖,在~/Framework/Views/
文件夾中找到的視圖爲~/Framework/Views/_ViewStart.cshtml
),但View Engine只是使用它找到的第一個,它是~/Views/
中的第一個。
這可能嗎?
謝謝
爲什麼不使用區域而不是搞亂視圖引擎? – 2013-03-07 23:00:31
這絕對是可能的 - 事實上,我只是使用您提供的視圖引擎在我的機器上將其複製並粘貼。 我看不到和你一樣的行爲。我有兩個_ViewStart文件,一個在〜/ Framework/Views/_ViewStart.cshtml,另一個在〜/ Views/_ViewStart.cshtml。當我在〜/ Framework/Views /中運行視圖時,它使用框架_ViewStart。當我在〜/ Views /中運行視圖時,它在那裏使用_ViewStart。 使用DotPeek雙重檢查RazorViewEngine中的代碼也證實了它應該如何表現。你確定你沒有錯過什麼嗎? – 2013-03-07 23:32:44
@NickAceves:謝謝你是對的。我的文件保存在錯誤的位置,錯誤文件的副本保存在正確的位置!什麼是dooch!再次感謝。 (把它放在答案中,我會標記它) – hofnarwillie 2013-03-08 09:55:58