2014-10-26 48 views
1

在MVC5中,我知道您可以在Views下有一個Shared文件夾,然後使用RenderPartial在部分視圖中進行渲染。是否有可能在MVC中有多個共享文件夾,並在另一個共享文件夾中執行部分視圖的RenderPartial?

整個網站是否只有一個Shared文件夾?還是有可能有多個「共享」區域?

舉例來說,我有我的網站的結構如下: -

\查看

\視圖\共享

\控制器

\型號

\身份

\標識\查看

\標識\控制器

\標識\型號

我不知道是否也有可能爲Identity文件夾有自己的Shared文件夾好,這RenderPartial也適用於?

如果這是可能的,我可以從這個其他Shared文件夾渲染一個PartialView?我曾嘗試過這種方法,但並不成功 - 即使我使用tilde ~方法直接引用視圖,但似乎並不喜歡投擲exception。但是,如果我把PartialView放在我的\Views\Shared文件夾中,那麼一切正常。

+0

你只需要添加'標識'作爲區域。因此,您將擁有單獨的視圖,控制器和視圖,並最終爲每個區域分開共享文件夾:) – 2014-10-26 17:46:14

回答

1

您可以通過在Application_Start()事件添加以下代碼的Global.asax包括在視圖引擎的目錄ViewEngine將在查看/共享以及身份/查看/共享

您可以參考this link,也可以參考這個SO Post

1

當渲染來自其他文件夾PartialView真是讓人不是默認View文件夾,您必須提供完整的路徑以及文件類型:

例:

@Html.Partial("~/Identity/Views/myviewname.cshtml") 

你正在做的方式,看起來你正試圖實現一個名爲Areas的已經存在的功能。

你應該到這裏看看:

RazorViewEngine razorEngine = ViewEngines.Engines.OfType<RazorViewEngine>().FirstOrDefault(); 
if (razorEngine != null) 
{ 
    string[] newPartialViewFormats = new[] 
      { 
      "~/Indentity/Views/{1}/{0}.cshtml", 
      "~/Identity/Views/Shared/{0}.cshtml" 
      }; 

    razorEngine.PartialViewLocationFormats = razorEngine.PartialViewLocationFormats.Union(newPartialViewFormats).ToArray(); 
} 

現在:

Walk through: Organizing an ASP.NET MVC Application using Areas

+0

完美。謝謝。我沒有放入'.cshtml',我原以爲這是自動的。 – Johnny 2014-10-26 16:56:59

+0

因此,我假設它只有一個網站的共享文件夾,考慮到我們必須指定完整路徑以使用其他任何部分視圖? – Johnny 2014-10-26 16:59:12

+1

@Johnny你可以在ViewEngine中添加你的目錄:http://stackoverflow.com/questions/4973000/adding-sub-directory-to-view-shared-folder-in-asp-net-mvc-and-calling-the - 默認情況下,它在Views目錄中查找,但我們可以添加更多目錄,引擎應該在其中查找視圖 – 2014-10-26 17:06:15