如何解决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个回答

3

使用dotnet版本为2.2.300的Visual Code出现错误信息,但不是运行时异常。

我的控制器是从ControllerBase派生而来的,所以我必须将ControllerBase更改为Controller。


3

在我们从.NET 2.2迁移到6后,我也遇到了同样的问题。在本地环境下一切正常,但部署版本却出现了“The view 'Index' was not found”错误。

原来,构建管道中的windows-latestlatest Visual Studio并不是指Windows 2022和Visual Studio 2022,因此发布版本不支持.NET 6。

在指定了Windows和Visual Studio的2022版本后,它开始正常工作。

以下是参考资料:https://github.com/dotnet/core/issues/6907


3
我在构建身份服务器实例时遇到了同样的问题,如果我从Visual Studio运行项目,则一切正常,但是在发布项目并使用dotnet命令运行后,当身份服务器尝试提供登录视图时,出现“未找到视图”错误。 我已经验证了这里提到的所有其他内容,但仍然无法工作。 最后我发现问题出在我如何运行dotnet命令上。 我是从父文件夹中运行的,即我的身份服务器实例的上一级,这影响了内容根路径,例如,运行以下命令:
dotnet myWebFolder/MyIdentityServer.dll

当 Identity Server 启动时,它给我提供了以下输出:

Output log showing Content root path set to C:\inetpub\aspnetcore

因此,在这种情况下,我的dll的完整路径是C:\inetpub\aspnetcore\myWebFolder\MyIdentityServer.dll,我从C:\inetpub\aspnetcore\文件夹运行了dotnet命令。
为了获取正确的内容根目录,我必须确保我从与dll相同的文件夹运行dotnet命令,例如dotnet MyIdentityServer.dll。这个更改给了我这个输出:

Output log showing Content root path set to C:\inetpub\aspnetcore\myWebFolder

现在我的内容根路径是正确的,身份验证服务器可以在C:\inetpub\aspnetcore\myWebFolder\Views\Account\Login.cshtml找到登录视图。


2
在我的情况下,这只是一个“遗忘”错误...
我拥有的视图文件夹的名称与控制器名称不同。
将文件夹重命名为正确的名称即可解决问题...

2

就我们的情况而言,当访问localhost:<port>/graphql时,即使View/GraphQL/Index.cshtml在正确的位置上,我们仍会收到此错误。我们之所以出现这个错误是因为wwwroot/bundle.jswwwroot/style.js最初被错误地忽略了,因为我们的.gitignore包括了wwwroot。通过检查网络流量并发现这些文件返回404而不是Index.cshtml本身,我们才发现了这个问题。


2

我也遇到了类似的错误。我正在使用 .Net Core 6.0 ASP .Net MVC 项目。

只需在 program.cs 中添加以下内容即可解决该问题。

builder.Services.AddRazorPages().AddRazorRuntimeCompilation();

你需要在项目文件中添加以下包引用。
<ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="6.0.3" />
</ItemGroup>

1
在我的情况下,问题出在我在csproj中设置的<EnableDefaultContentItems>false</EnableDefaultContentItems>

1
如果有人遇到类似的问题。 结果发现我的csproj文件有一些无效的引用到我的视图。 我删除了与我的视图相关的任何记录,从项目目录中删除了csproj.user文件,并重新加载了项目,然后包括了我的视图。事情开始起作用。

1

如果您正在使用不同的区域,请不要忘记在控制器上添加[Area("Area-Name")]属性。这就是我的问题所在。


1

回复 @LukaszDev(我不认为我可以在评论中附加图片)

我的视图是 Index.cshtml,这是我自己的笔误。请查看附加的截图。

enter image description here

我的控制器非常简单。对于Index和Welcome,我都得到了相同的错误。

using Microsoft.AspNetCore.Mvc;

namespace app1 {

    [Route("[controller]")]
    public class HomeController : Controller {

        // default action, configured in Startup.cs route
        public IActionResult Index() {
            // handles route /home
            return View();
        }

        [Route("welcome")]
        public IActionResult WelcomeActionDoesNotHaveToMatchName() {
            // handles router /home/welcome
            return View("Welcome"); 
        }
    }
}

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