gpt4 book ai didi

c# - Asp.Net Core 2.2 身份页面不能与 View /共享文件夹中的布局一起使用

转载 作者:太空宇宙 更新时间:2023-11-03 22:37:38 24 4
gpt4 key购买 nike

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

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

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

<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: Object reference not set to an instance of an object.

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

NullReferenceException: Object reference not set to an instance of an object. AspNetCore.Views_Shared__Layout_Industry.b__14_0() in _Layout-Industry.cshtml + var controllerName = this.ViewContext.RouteData.Values["controller"].ToString();

所以我直接在注册页面中将布局设置为空,页面以其基本形式呈现。

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

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

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

    这是第一次打开时的网站

Site Main Page

如果您单击右上角的“注册/链接”按钮,它应该会将您带到注册页面,但它会失败

注册页面是默认 Web 应用程序中的默认注册页面,布局页面是我自己的,它适用于所有 14 个不在身份区域下且位于标准 View 子文件夹中的其他页面

Page load enter image description here

更新:

我有一个将元标记部分加载到页面的 View 组件。这是代码

@{
var controllerName = this.ViewContext.RouteData.Values["controller"]?.ToString();
var actionName = this.ViewContext.RouteData.Values["action"]?.ToString();
var userid = UserManager.GetUserId(User);
}
<!--Meta Tags- Using MetatagViewComponent-->
@if (controllerName != null && actionName != null)
{
@await Component.InvokeAsync("Metatag", new MetatagViewComponent.MetatagRequest { Controller = controllerName, Action = actionName })
}

Controller 和操作调用失败,因为身份页面中没有 Controller 。我让它们可以为空并绕过它们,现在加载了注册页面。有没有办法从身份页面获取 View 名称,然后我可以像对所有其他页面一样检索元标记。

最佳答案

它正在使用您的布局。问题是您的布局确实会引发异常。现在,当 Razor 页面与传统 MVC View 使用时它抛出异常的原因是,对于 Razor 页面,没有 Controller ,因此 ViewContext.RouteData.Values["controller"] 为 null .尝试关闭导致 NullReferenceExceptionToString()

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

关于c# - Asp.Net Core 2.2 身份页面不能与 View /共享文件夹中的布局一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54204869/

24 4 0
文章推荐: javascript - 如何在 Node.js 网站中组织模型?
文章推荐: Python 和 OpenCV : Realtime Get RGB Values When Mouse Is Clicked
文章推荐: python - 如何使用 IP Cam 代替 USB Web Cam 检测/识别人脸
文章推荐: html - 我怎样才能让这个
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com