ASP.NET Core 3.0用户资料页面布局无法正常工作

7

在 Asp core 3.0 中,当用户点击其个人资料"Areas/Identity/Pages/Account/Manage/_layout.cshtml"时,我的布局页面无法正常工作。

登录后,当我点击默认电子邮件时,我会得到 Manage/Index.cshtml,但没有布局细节。例如导航、忘记密码等链接不显示。我不知道是什么原因导致这种情况。

我将其与其他项目进行比较,并查看任何差异,但找不到布局未显示的原因。

Areas/Identity/Pages/Account/Manage/_layout.cshtml

@{
Layout = "/Areas/Identity/Pages/_Layout.cshtml";
 }

Areas/Identity/Pages/Account/Manage/Index.cshtml

@page
@model IndexModel
@{
  ViewData["Title"] = "Profile";
  ViewData["ActivePage"] = ManageNavPages.Index;
}

Areas/Identity/Pages/Account/_ViewStart.cshtml

@{
Layout = "/Views/Shared/_Layout.cshtml";
}

尝试查看我错过了什么或任何其他检查页面布局的地方。

输入图像描述

输入图像描述


你期望的布局是什么?默认情况下,它将是管理。一般来说,如果您能够登录,您应该知道密码,为什么要在“管理”页面显示忘记密码? - Edward
我想在创建新的asp.net core应用程序时使用默认布局。当您单击电子邮件时,它会带您到管理页面。我缺少我的默认布局,包括更改密码、编辑个人资料、下载个人数据等侧面导航。我只得到一个带有电子邮件和电话号码表单,Manage/_Layout.cshtml没有呈现。 - robert_rg
请分享您目前的结果?是否有演示可以重现您的问题? - Edward
我附上了截图,但我想要的布局没有渲染出来。 - robert_rg
有没有演示可以重现你的问题?对于 Profile,它在 _ManageNav.cshtml 中,并且通过在 Pages/Account/Manage/_Layout.cshtml 中使用 <partial name="_ManageNav" /> 进行调用。 - Edward
5个回答

12

我遇到了相同的问题,我怀疑这是由于在startup.ConfigureServices中替换services.AddDefaultIdentity调用引起的——在我的情况下,我用AddIdentity替换了它,因为我需要将RoleManager传递给我的控制器。

这个问题可能有更优雅的解决方案,但我放弃寻找了,因为我发现整个新功能的文档记录都不太好。

以下是我解决此问题的方法:

我假设您已经对Identity页面进行了脚手架搭建-如果没有,请参阅:https://learn.microsoft.com/en-us/aspnet/core/security/authentication/scaffold-identity?view=aspnetcore-3.0&tabs=visual-studio

在Areas\Identity\Pages\Account\Manage_Layout.cshtml页面中,修改布局位置为:

@{
    Layout = "/Views/Shared/_Layout.cshtml";
}

现在在您的索引页面Areas\Identity\Pages\Account\Manage\Index.cshtml中,您还需要明确设置布局页面:

@page
@model IndexModel
@{
    Layout = "_Layout.cshtml";
}
@{
    ViewData["Title"] = "Profile";
    ViewData["ActivePage"] = ManageNavPages.Index;
}

您还需要在该文件夹下的所有其他页面中显式设置此布局。


1
后半部分似乎不再必要。只需在Net Core 3.0 Web MVC项目中的Areas\Identity\Pages\Account\Manage\_Layout.cshtml中设置Layout = "/Views/Shared/_Layout.cshtml";即可解决我的问题(在脚手架生成所有页面之后)。 - Steffen Cole Blake
不确定有什么区别,但我正在使用默认的身份区域脚手架的3.1核心MVC项目上工作,仍然需要在“Index”页面中添加“Layout =”行。当然,在替换了“services.AddDefaultIdentity”之后,它之前运行良好。 - jamheadart
现在是2021年,这也解决了.NET 5中的确切问题。 - MÇT
值得注意的是,如果您正在使用 Blazor,则应将其更改为 /Pages/Shared/_Layout.cshtml - Joshua Ashton
谢谢!现在是2023年,这解决了我的.NET 6问题...这个破玩意花了好几个小时,文档非常差劲。 - Perazim
对于仍在使用这个“批准”的答案的人,请使用建议使用“.AddDefaultUI()”的答案!您只需在启动时添加1行代码,而不是更改N个文件即可完成。 - LeventHAN

10
在设置时,在启动类中使用AddDefaultUI()
services.AddIdentity<User, Role>().AddDefaultUI() 

3

更新。

为解决问题,请安装Microsoft.AspCoreNet.Identity.UI NuGet 包并添加 AddIdentity。

 services.AddIdentity<User, IdentityRole>(options => options.SignIn.RequireConfirmedEmail)
    .AddEntityFrameworkStores<ApplicationDbContext>()
    .AddDefaultTokenProviders()
    .AddDefaultUI();

但这是有代价的。添加AddDefaultUI()解决了ActivePage问题,但也像上面所说创建了另一个问题。AddDefaultUI()导致我的布局消失。然后我应用了上面建议的解决方案并恢复了布局,但随后ActivePage又消失了。

为了节省时间,我删除了Identity区域中的所有文件并脚手架化了Identity。TaDa,ActivePage和我的布局都完美地工作了。

我正在使用.Net Core 5.0.0

https://learn.microsoft.com/en-us/dotnet/core/compatibility/aspnetcore#identity-adddefaultui-method-overload-removed


在此期间,我意识到自己并不完全正确。如果您安装nuGet包Microsoft.AspCoreNet.Identity.UI(已更新到版本5.0.0),则.AddDefaultUI将再次可用。这就是解决的方法...但是,我失去了我的一般布局。我尝试按照所述进行修复,并恢复了布局,但我随后失去了Activepage...因此,我删除了标准Identity中的身份验证区域...塔达,一切正常,除了需要在某些地方添加一些额外的编码...顺便说一句,我正在使用Core 5。 - Lindstrøm

0
你需要在你的布局中添加一个名为_ManageNav.cshtml的部分类。就在RenderBody()之前:
    <div class="row">
        <div class="col-3">
            <partial name="_ManageNav" />
        </div>
        <div class="col-9">
            <main role="main">
                @RenderBody()
            </main>
        </div>
    </div>

0
在我的情况下,我只是把 ViewStart.cshtml 文件放错了目录。 我应该把这个文件放在 Views 文件夹中,但我把 _ViewStart 文件和 _Layout.cshtml 放在了 Views/Shared 中。

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