为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
翻阅古今 2022-07-23 16:42:13
我刚刚开始使用 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,页面以基本形式呈现。所以问题变成了两个方面;为什么我在 Identity 部分 ViewStart 文件中设置的布局(我也在 Views/Shared 文件夹中设置的布局)在所有 Identity 页面中都失败,但在 Areas 文件夹下以外的任何其他页面中都可以正常工作?即使我直接在文件中设置布局完整路径,它仍然会失败并出现同样的错误。布局文件名为 _Layout-Industry,但我在错误详细信息中注意到它显示为 _Layout_Industry,该连字符是否会导致问题?
查看完整描述

1 回答

?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

它正在使用您的布局。问题是您的布局实际上会引发异常。现在,它在 Razor Page 与传统 MVC 视图使用时引发异常的原因是 Razor Pages 没有控制器,因此ViewContext.RouteData.Values["controller"]为 null。试图ToString()取消这会导致您的NullReferenceException.

使用 Razor 页面,“动作”和“控制器”都不会出现在您的 RouteData 中,因为这些概念都不适用。相反,您将拥有“页面”和“处理程序”。如果您想对 Razor Pages 和 MVC 视图使用相同的布局,那么您需要调整您对控制器名称所做的逻辑以适应 Razor Pages。


查看完整回答
反对 回复 2022-07-23
  • 1 回答
  • 0 关注
  • 116 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信