per*_*aja 5 asp.net-identity asp.net-core razor-pages
我根据文档搭建了 Identity 脚手架,除了/Manage文件夹的布局外,一切正常。目录设置与脚手架完全一样。
为清楚起见:
/Areas/Identity/Pages/Account/Manage是问题文件夹。
/Pages包含从我的视图/共享文件夹设置布局的 _ViewStart 文件。
/Pages/Account从 _Viewstart 接收布局并正常工作。
/Pages/Account/Manage此处的所有内容仅接收 _ViewStart 布局。此处的 _Layout 文件不会被其中的页面自动找到。
Areas/Identity/Pages/Account/Manage/_Layout.cshtml
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h1>Manage your account</h1>
<div>
<h4>Change your account settings</h4>
<hr />
<div class="row">
<div class="col-md-3">
<partial name="_ManageNav" />
</div>
<div class="col-md-9">
@RenderBody()
</div>
</div>
</div>
@section Scripts {
@RenderSection("Scripts", required: false)
}
Run Code Online (Sandbox Code Playgroud)
这正是因为它被脚手架插入,并且只有在您将 AddDefaultIdentity() 更改为 AddIdentity() 时布局才会中断。我使用我搭建的参考资料,这让我相信我在删除默认 UI 时没有考虑到某些事情。我发现的唯一解决方法是手动设置每个 .cshtml 文件的布局/Manage
@{
Layout = "_Layout";
}
Run Code Online (Sandbox Code Playgroud)
这修复了所有内容并导致布局为/Manage. 我阅读了文档,它指出每个 Razor Page 控制器应该在搜索其他地方之前搜索自己的文件夹以查找 _Layout 文件。有没有原因它没有检测到文件?
“我发现的唯一解决方法是手动设置 /Manage 中每个 .cshtml 文件的布局”:
你不必这样做。_ViewStart.cshtml只需在您的文件夹下创建一个Manage/:
@* file: Manage/_ViewStart.cshtml *@
@{
Layout = "_Layout"; // Use a partial layout name instead of absolute name
}
Run Code Online (Sandbox Code Playgroud)
另请注意,默认Manage/Layout.cshtml使用的父布局/Areas/Identity/Pages/_Layout.cshtml可能不存在于您的脚手架文件中:
@* file: Manage/Layout.cshtml *@
@{
Layout = "/Areas/Identity/Pages/_Layout.cshtml"; // you might want to change this to `/Views/Shared/_Layout.cshtml`
}
Run Code Online (Sandbox Code Playgroud)“它规定每个 Razor Page 控制器在搜索其他地方之前应该在自己的文件夹中搜索 _Layout 文件”
仅当您使用部分_Layout名称时才是如此。但是,如果您使用以斜杠开头的绝对名称,它将直接使用该布局。请参阅官方文档:
当提供部分名称时,Razor 视图引擎使用其标准发现过程来搜索布局文件。首先搜索处理程序方法(或控制器)所在的文件夹,然后搜索共享文件夹。此发现过程与用于发现部分视图的过程相同。
/Areas/Identity/Pages/_Layout.cshtml在您的情况下,以 a 开头的布局名称/不是部分名称。这就是您的页面无法发现布局的原因。为了解决此问题,请改用部分名称_Layout。(这可以通过单个_ViewStart.cshtml文件来完成,就像我上面所做的那样,不要为每个页面添加它)
最后,您可能想知道为什么它在使用AddDefaultIdentity(). 正如您所发现的,AddDefaultIdentity()将添加默认 UI,最终调用该AddRelatedParts()方法。当没有这样的布局或页面时,这允许它回退到默认 UI。例如,当您Identity使用搭建时Visual Studio,它会提供一个列表,您可以使用它来覆盖默认页面。以上/Areas/Identity/Pages/_Layout.cshtml来自默认 UI。
| 归档时间: |
|
| 查看次数: |
846 次 |
| 最近记录: |