我刚刚开始使用 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。
- 1 回答
- 0 关注
- 135 浏览
添加回答
举报
0/150
提交
取消