2014-10-26 49 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