繁体   English   中英

转换为 AS.NET Core 3.1 后 MVC 找不到视图

[英]MVC can't find Views after converting to ASPNET Core 3.1

我们正在将 MVC/Angular web 站点从 AS.NET Core 2.2 转换为 AS.NET Core 3.1。 我让构建运行时没有错误或警告,但是当它启动时(在 Visual Studio 2019 中),它会查找 Home/Index,找到 controller 正常,并查找 Home/Index 视图,但它无法找到它,即使它在那里(在 Views/Home/Index.cshtml 中),就在它应该在的地方(而且在我们开发这个网站的几个月里它一直在的地方。我现在把它简化为一个测试如果我可以将 web 项目文件设置为 .netcoreapp2.2 并且站点运行正常,然后停止它并更改为 .netcoreapp3.1,没有其他更改,它失败了。这些错误正是你所期望的,如果文件丢失:

System.InvalidOperationException:未找到视图“索引”。 搜索了以下位置:

/Views/Home/Index.cshtml

/Views/Shared/Index.cshtml

/Pages/Shared/Index.cshtml

但是文件在那里。 我完全不知所措。

谁能告诉我发生了什么事?

谢谢。

我们刚刚遇到了类似的部分问题:将 Web 应用程序从核心 2.2 升级到 3.1 后,找不到部分视图。 我们的解决方案是更换这个......

services.AddMvc();

... 和 ...

services.AddControllersWithViews();
services.AddRazorPages().AddRazorRuntimeCompilation();

虽然我相信 .AddMvc() 等同于 .AddControllersWithViews() 加上 .AddRazorPages 它不包括开箱即用的运行时编译部分。

查看路由调整部分 - 参见Migrate from ASP.NET Core 2.2 to 3.0

您很可能需要在Startup类中更改此设置:

app.UseMvc(routes =>
    {
        routes.MapRoute("default", "{controller=Home}/{action=Index}/{id?}");
    });

接着就,随即:

app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllerRoute("default", "{controller=Home}/{action=Index}/{id?}");
    });

代替

`app.UseMvc(routes =>
        {
            routes.MapRoute(
               name: "areas",
              template: "{area=User}/{controller=Home}/{action=Index}/{id?}");
        });`

`app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllerRoute(
                name: "default",
                pattern: "{controller=Home}/{action=Index}/{id?}");
            endpoints.MapRazorPages();
        });`

他们迁移从.net的Core 2到.NET核心3时更换app.UseMvcapp.UseEndponts。

此外,如果您有另一个视图文件夹,请将_ViewImports.cshtml_ViewStart.cshtml从现有视图文件夹复制到其他视图文件夹。

我有同样的问题。

对我来说,它在项目文件中是这样的:

<RazorCompileOnBuild>false</RazorCompileOnBuild>
<RazorCompileOnPublish>false</RazorCompileOnPublish>

我不得不删除它。

首先,你必须安装 package Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation

install-package Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation

然后在startup.cs中的services.AddControllersWithViews()行之后添加AddRazorRuntimeCompilation()

services.AddControllersWithViews().AddRazorRuntimeCompilation();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM