如何解决ASP.NET Core MVC项目中的“视图未找到”异常

65
我正在尝试使用VS Code在OSX上创建一个运行ASP.NET Core MVC测试应用程序。 当访问默认的Home/index(或我尝试的任何其他视图)时,我遇到了“视图未找到”的异常。
这是启动配置。
    public void Configure(IApplicationBuilder app) {

        // use for development
        app.UseDeveloperExceptionPage();
        app.UseDefaultFiles();
        app.UseStaticFiles();

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

我在Views/Home/index.cshtml中定义了视图,并在project.json中包含了以下软件包。

"dependencies": {
"Microsoft.NETCore.App": {
  "version": "1.0.0-rc2-3002702",
  "type": "platform"
},
"Microsoft.AspNetCore.Razor.Tools" : "1.0.0-preview1-final",
"Microsoft.AspNetCore.Diagnostics": "1.0.0-rc2-final",
"Microsoft.AspNetCore.Mvc": "1.0.0-rc2-final",
"Microsoft.AspNetCore.Server.IISIntegration": "1.0.0-rc2-final",
"Microsoft.AspNetCore.Server.Kestrel": "1.0.0-rc2-final",
"Microsoft.AspNetCore.StaticFiles": "1.0.0-rc2-final",
"Microsoft.AspNetCore.Routing": "1.0.0-rc2-final"
},

最后,这是我收到的异常。

System.InvalidOperationException: The view 'Index' was not found. The following locations were searched:
    /Views/Home/Index.cshtml
    /Views/Shared/Index.cshtml
    at Microsoft.AspNetCore.Mvc.ViewEngines.ViewEngineResult.EnsureSuccessful(IEnumerable`1 originalLocations)
    at Microsoft.AspNetCore.Mvc.ViewResult.<ExecuteResultAsync>d__26.MoveNext()
    --- End of stack trace from previous location where exception was thrown --- ...

有什么建议是我可能忽略了的吗?


请展示一下你的HomeController代码。 - Lukasz Mk
1
检查文件名 -> index.cshtml -> Index.cshtml - Lukasz Mk
1
将视图从项目中排除,然后再次包含即可解决问题!!! - Nima Talebi
@NimaTalebi 的解决方案对我很有帮助! - Kevin Dark
33个回答

1

当我将我的.NET应用程序升级到.NET Core 6.0时,我遇到了这个问题。

<TargetFramework>net6.0</TargetFramework>
<AddRazorSupportForMvc>true</AddRazorSupportForMvc>

这个AddRazorSupportForMvc设置有助于解决“未找到视图索引”的问题。


1

我在 Arch Linux,Visual Studio Code 和 .NET Core 3.1 和 5.0 中遇到了同样的问题。

我通过在 tasks.json 文件的构建部分中删除 csproj 文件的路径来解决它:

"tasks": [
    {
        "label": "build",
        "command": "dotnet",
        "type": "process",
        "args": [
            "build",
            // removed the following line:
            // "${workspaceFolder}/ProjectFoo.csproj",
            "/property:GenerateFullPaths=true",
            "/consoleloggerparameters:NoSummary"
        ],
        "problemMatcher": "$msCompile"
    },

0
我遇到了同样的问题。在我的情况下,我不得不将 <CopyToOutputDirectory>Never</CopyToOutputDirectory> 这行代码从 .csproj 文件中改为 <CopyToOutputDirectory>Always</CopyToOutputDirectory>

0
我在生产环境中遇到了与“登录”视图找不到的相同问题。对我来说,问题与用于发布的IDE有关。 最初,我使用的是JetBrains Rider,遇到了这个错误。然而,当我切换到使用Visual Studio 2022发布项目时,问题得到解决。所以如果你也遇到了这个问题,考虑使用Visual Studio 2022来发布你的ASP.NET Core应用程序。这对我起作用,也可能对你起作用。

感谢您对Stack Overflow社区做出贡献的兴趣。这个问题已经有了相当多的答案,其中一个答案已经得到社区广泛验证。您确定您的方法之前没有被提及过吗?如果是这样的话,解释一下您的方法与众不同的地方会很有帮助,以及在什么情况下您的方法可能更好,并且为什么您认为之前的答案不够满意。您能否友好地编辑您的回答并提供解释呢? - Jeremy Caney

0

我也遇到了类似的问题,花费了很长时间才解决... 解决方法在.csproj文件中,如果有任何视图被标记为Remove,则删除这些条目并将这些视图包含在解决方案资源管理器中的项目中...然后实际修复只需添加一个测试视图viewfile index3.cstml,并从操作中调用它,然后部署所有内容就可以正常运行了。稍后可以删除那个额外的视图文件。100%有效。enter link description here


奇怪,我的csproj文件中随机添加了一个视图三次...谢谢! - kitsu.eb

0

为现有项目中的所有环境启用运行时编译:

  1. 安装 Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation NuGet 包。 Install-Package Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation

  2. 更新项目的 Startup.ConfigureServices 方法,包括调用 AddRazorRuntimeCompilation。 builder.Services.AddRazorPages().AddRazorRuntimeCompilation();


0
在我的情况下,从Core 2.2迁移到3.1后,我的静态HTML文件无法被找到。在我的startup.cs文件中,我不得不在app.UseStaticFiles()之前添加app.UseDefaultFiles()才能使其正常工作。因此,类似于这样的东西:
public void ConfigureServices(IServiceCollection services)
{
   .
   .
   .
   services.AddControllersWithViews();
   .
   .
   .
}


public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
   .
   .
   .
   app.UseDefaultFiles();
   app.UseStaticFiles();
   app.UseRouting();
   .
   .
   .
   app.UseEndpoints(endpoints =>
   {
          endpoints.MapControllerRoute(
          name: "default",
          pattern: "{controller=Home}/{action=Index}/{id?}");
   });
}

-1
如果有人在创建新的MVC ASP.NET项目时遇到了VS 2022中的这个问题,我必须执行dotrun watch run,然后Debug Visual Studio项目。问题就解决了。
我不确定为什么在调试模式下dotrun不会默认启动。

-1

我在Ubuntu Linux上遇到了这个错误,第一次尝试从CLI运行它,所以我通过运行sudo dotnet build命令来解决它,结果证明是一个权限问题,并且应用程序可以通过dotnet bin/Debug/netcoreapp2.0/MyApp.dll正常启动。不幸的是,构建命令没有通知权限问题。


-1
对我来说,我只是重新构建了解决方案,问题就解决了(VS 2022,ASP.net Core 6 MVC)。

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接