asp.net - 在ASP.Net MVC中向 "View/Shared"文件夹添加子目录并调用 View

标签 asp.net asp.net-mvc asp.net-mvc-2 asp.net-mvc-3 razor

我目前正在使用 ASP.Net MVC3 和 Razor 开发一个网站。在“View/Shared”文件夹中,我想添加一个名为“Partials”的子文件夹,我可以在其中放置所有部分 View (为了更好地组织网站。

只要我在调用 View 时始终引用“Partials”文件夹(使用 Razor),我就可以毫无问题地执行此操作:

@Html.Partial("Partials/{ViewName}")

我的问题是,是否有办法将“Partials”文件夹添加到 .Net 在搜索 View 时经过的列表中,这样我就可以调用我的 View ,而无需引用“Partials”文件夹,例如所以:

@Html.Partial("{ViewName}")

感谢您的帮助!

最佳答案

解决了这个问题。要将我创建的“Shared/Partials”子目录添加到尝试在 Razor 中查找部分 View 时搜索的位置列表中,请使用:

@Html.Partial("{NameOfView}")

首先创建一个以 RazorViewEngine 作为其基类的 View 引擎,并按如下所示添加 View 位置。同样,我想将所有部分 View 存储在我在 MVC 创建的默认“Views/Shared”目录中创建的“Partials”子目录中。

public class RDDBViewEngine : RazorViewEngine
{
    private static readonly string[] NewPartialViewFormats = 
    { 
        "~/Views/{1}/Partials/{0}.cshtml",
        "~/Views/Shared/Partials/{0}.cshtml"
    };

    public RDDBViewEngine()
    {
        base.PartialViewLocationFormats = base.PartialViewLocationFormats.Union(NewPartialViewFormats).ToArray();
    }       

}

请注意,位置格式中的 {1} 是 Controller 名称,{0} 是 View 名称。

然后将该 View 引擎添加到 global.asax 中的 Application_Start() 方法中的 MVC ViewEngines.Engines 集合中:

ViewEngines.Engines.Add(new RDDBViewEngine()); 

关于asp.net - 在ASP.Net MVC中向 "View/Shared"文件夹添加子目录并调用 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4973000/

相关文章:

asp.net - ASP.NET Web 控件之间的 Javascript 交互

asp.net-mvc - SignalR——来自多个局部 View 的连接?

asp.net-mvc - 如果(ModelState.IsValid==false)返回View();或 View (模型);?

asp.net - 加载子页面时禁用父页面

asp.net - ASP.NET 页面上的多种语言(英语、法语)

asp.net-mvc - 是否可以从同一项目使用 WCF 服务?

javascript - KnockoutJS 绑定(bind)问题 - 无法读取属性

c# - 如何将 VaryByParam 与多个参数一起使用?

c# - 修改现有元标记

javascript - 有没有办法在 AJAX 调用的 javascript 中或仅在方法中存储 session 变量?