簡體   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