Asp.Net Core 2.2 身份页面不适用于视图/共享文件夹中的布局

我刚刚开始使用 Asp.Net Core 2.2 研究新 Web 应用程序的注册/登录/注销功能。

我已经搭建了身份页面,对我来说更容易。我不喜欢这种新方法。

我的页面代码像这样生成注册页面的链接

<div class="text-right reg-button">
    <a asp-area="Identity" asp-page="/Account/Register" class="submit">Register</a></div>

这会生成链接

<div class="text-right reg-button">
    <a class="submit" href="/Identity/Account/Register">Register</a></div>

单击该链接会产生错误

NullReferenceException:对象引用未设置为对象的实例。

该链接看起来正确,所以我怀疑它尝试使用的布局有问题,因为这也是错误详细信息的一部分。

NullReferenceException:对象引用未设置为对象的实例。AspNetCore.Views_Shared__Layout_Industry.b__14_0() in _Layout-Industry.cshtml + var controllerName = this.ViewContext.RouteData.Values["controller"].ToString();

所以我直接在Register页面中将布局设置为null,页面以基本形式呈现。

所以问题变成了两个方面;

  1. 为什么我在 Identity 部分 ViewStart 文件中设置的布局(我也在 Views/Shared 文件夹中设置的布局)在所有 Identity 页面中都失败,但在 Areas 文件夹下以外的任何其他页面中都可以正常工作?

  2. 即使我直接在文件中设置布局完整路径,它仍然会失败并出现同样的错误。布局文件名为 _Layout-Industry,但我在错误详细信息中注意到它显示为 _Layout_Industry,该连字符是否会导致问题?


翻阅古今
浏览 136回答 1
1回答

肥皂起泡泡

它正在使用您的布局。问题是您的布局实际上会引发异常。现在,它在 Razor Page 与传统 MVC 视图使用时引发异常的原因是 Razor Pages 没有控制器,因此ViewContext.RouteData.Values["controller"]为 null。试图ToString()取消这会导致您的NullReferenceException.使用 Razor 页面,“动作”和“控制器”都不会出现在您的 RouteData 中,因为这些概念都不适用。相反,您将拥有“页面”和“处理程序”。如果您想对 Razor Pages 和 MVC 视图使用相同的布局,那么您需要调整您对控制器名称所做的逻辑以适应 Razor Pages。
打开App,查看更多内容
随时随地看视频慕课网APP