我的mvc项目的布局如下:

  • /控制器
  • /视图
    • /演示
    • /演示/演示Area1/Index.aspx
    • /演示/演示Area2/Index.aspx

然而,当我有这个DemoArea1Controller美元的时候:

public class DemoArea1Controller : Controller
{
    public ActionResult Index()
    {
        return View();
    }
}

我得到了"视图‘索引’或其主文件找不到"错误,以及通常的搜索位置.

如何指定"Demo"命名空间中控制器在"Demo"查看子文件夹中搜索?

推荐答案

您可以轻松扩展WebFormViewEngine,以指定要查看的所有位置:

public class CustomViewEngine : WebFormViewEngine
{
    public CustomViewEngine()
    {
        var viewLocations =  new[] {  
            "~/Views/{1}/{0}.aspx",  
            "~/Views/{1}/{0}.ascx",  
            "~/Views/Shared/{0}.aspx",  
            "~/Views/Shared/{0}.ascx",  
            "~/AnotherPath/Views/{0}.ascx"
            // etc
        };

        this.PartialViewLocationFormats = viewLocations;
        this.ViewLocationFormats = viewLocations;
    }
}

确保通过修改Global.asax.cs中的Application_Start方法注册视图引擎

protected void Application_Start()
{
    ViewEngines.Engines.Clear();
    ViewEngines.Engines.Add(new CustomViewEngine());
}

Asp.net相关问答推荐

$(document).ready 不工作

此版本的 SQL Server 不支持用户实例登录标志.连接将关闭

IE10 SCRIPT5009:__doPostBack未定义

在 ASP.NET 中更改错误消息的语言

RestSharp 获取请求的完整 URL

将复选框的值传递给 asp.net mvc4 中的控制器操作

__doPostBack 未定义

这两种方法有什么区别?

在 Blazor 中 Select 框绑定

ASP.NET 中的 <%# Bind("") %> 和 <%# Eval("") %> 有什么区别?

错误:无法在 Web 服务器上开始调试... ASP.NET 4.0

页面在谷歌浏览器中加载两次

在 asp.net 中为动态 PDF 指定文件名

如何以编程方式将标签的前景色设置为其默认值?

从 IFrame 重定向父页面

为 ASP.NET Core MVC 显示 404 Not Found 页面

ASP.NET MVC 路由的无限 URL 参数

可以在不 destruct 站点的情况下将 MIME 类型添加到 web.config 吗?

如何在 ASP.NET 响应中传递大文件?

如何使用 WebAPI 处理图像