是否可以在MVC中拥有多个共享文件夹,并将RenderPartial执行到另一个共享文件夹中的部分视图?

时间:2014-10-26 16:46:40

标签: c# asp.net-mvc asp.net-mvc-5

在MVC5中,我知道您可以在Shared下有一个Views文件夹,然后使用RenderPartial在部分视图中呈现。

整个网站是否只有一个Shared文件夹?或者是否可以有多个“共享”区域?

例如,我的网站上有以下结构: -

  

\浏览

     

\视图\共享

     

\控制器

     

\模型

     

\身份

     

\身份\观

     

\身份\控制器

     

\身份\模型

我想知道Identity文件夹是否也可以拥有自己的Shared文件夹,RenderPartial也能用于?

如果可以,我可以从另一个PartialView文件夹中呈现Shared吗?我试过这个但是没有成功 - 即使我使用tilde ~方法直接引用View,但它似乎不喜欢抛出exception。但是,如果我将PartialView放在我的\Views\Shared文件夹中,那么一切正常。

2 个答案:

答案 0 :(得分:1)

从其他文件夹而不是默认的PartialView文件夹中呈现View时,您必须提供完整路径和文件类型:

<强>实施例

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

您正在尝试实现已存在的名为Areas的功能。

你应该看看这里:

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

答案 1 :(得分:1)

您可以在Application_Start()事件中的 Global.asax 中添加以下代码,从而在ViewEngine中包含您的目录:

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();
 }

现在,ViewEngine会在查看/共享以及身份/观看/共享

中找到该视图

您可以参考this link并参考此SO Post