You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改ASP.NET MVC视图搜索位置顺序,优先检索Common文件夹?

嘿,这个需求其实很好实现,咱们只需要自定义视图引擎的搜索路径,把默认的Shared文件夹替换成你要的Common,同时保留控制器对应视图文件夹的优先级就行。下面一步步来操作:

自定义ASP.NET MVC视图搜索顺序,替换Shared为Common文件夹

ASP.NET MVC的视图搜索逻辑默认由RazorViewEngine(对应Razor视图)或WebFormViewEngine(对应WebForm视图)控制,咱们通过继承并重写这类引擎的路径配置,就能完全按照你的需求调整搜索顺序。

1. 创建自定义Razor视图引擎类

在项目里新建一个类,比如CustomRazorViewEngine,继承自RazorViewEngine,然后在构造函数里重新定义视图搜索路径数组,严格按照你要的顺序排列:

using System.Web.Mvc;

public class CustomRazorViewEngine : RazorViewEngine
{
    public CustomRazorViewEngine()
    {
        // 自定义视图搜索路径,{0}代表视图名,{1}代表控制器名
        ViewLocationFormats = new[]
        {
            "~/Views/{1}/{0}.cshtml",
            "~/Views/{1}/{0}.vbhtml",
            "~/Views/Common/{0}.cshtml",
            "~/Views/Common/{0}.vbhtml"
        };

        // 如果需要部分视图也遵循同样规则,同步修改PartialViewLocationFormats
        PartialViewLocationFormats = new[]
        {
            "~/Views/{1}/{0}.cshtml",
            "~/Views/{1}/{0}.vbhtml",
            "~/Views/Common/{0}.cshtml",
            "~/Views/Common/{0}.vbhtml"
        };
    }
}

2. 注册自定义视图引擎

接下来要在项目的初始化代码里替换掉默认的视图引擎,以传统MVC项目的Global.asax.cs为例,在Application_Start方法中添加如下代码:

protected void Application_Start()
{
    // 先清除系统默认的视图引擎
    ViewEngines.Engines.Clear();
    // 注册咱们自定义的视图引擎
    ViewEngines.Engines.Add(new CustomRazorViewEngine());

    // 保留项目原有的其他初始化逻辑,比如路由注册等
    RouteConfig.RegisterRoutes(RouteTable.Routes);
}

如果是基于OWIN的MVC项目,就把这段注册代码放到Startup.cs的配置方法里即可。

3. 验证效果

现在测试一下:当Home控制器调用Index视图时,系统会先查找~/Views/Home/Index.cshtml,找不到就找~/Views/Home/Index.vbhtml,如果这两个都不存在,就会去~/Views/Common/Index.cshtml和~/Views/Common/Index.vbhtml里依次查找,完全符合你设定的搜索顺序。

要是你的项目还在用WebForm视图(.aspx/.ascx),可以用同样的逻辑自定义WebFormViewEngine,修改对应的路径格式就行。


内容的提问来源于stack exchange,提问作者Joe herman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:30:29