ASP.NET Core 3.0-标识UI管理文件夹未接收布局



我根据文档搭建了Identity脚手架,除了/Manage文件夹的布局外,其他一切都正常工作。目录的设置与搭建的完全一样

所有杂项的目录设置。文件已删除

为了清楚起见:/Areas/Identity/Pages/Account/Manage是问题文件夹

/Pages包含ViewStart文件,该文件从我的Views/Shared文件夹中设置布局
/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)
}

这正是它被搭建起来的样子,只有当您将AddDefaultIdentity((更改为AddIdentity((时,布局才会中断。我使用了一个我搭建的参考,这让我相信我在删除默认UI时没有考虑到什么。我找到的唯一解决方法是手动设置/Manage中每个.cshtml文件的布局

@{
Layout = "_Layout";
}

这修复了所有问题,并使/Manage内部页面的布局正常工作。我阅读了文档,其中指出,每个Razor Page控制器在搜索其他位置之前,都应该在自己的文件夹中搜索_Layout文件。它没有检测到文件是有原因的吗?

  1. "我找到的唯一解决方法是手动设置/Manage中每个.cshtml文件的布局":

    你不必这么做。只需在Manage/下创建一个_ViewStart.cshtmlfoler:

    @* file: Manage/_ViewStart.cshtml *@
    @{
    Layout = "_Layout";    // Use a partial layout name instead of absolute name
    }
    

    还要注意,默认的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`
    }
    
  2. "它规定每个Razor Page控制器在搜索其他地方之前,都应该在自己的文件夹中搜索布局文件(_Layout(">

    只有当您使用部分_Layout名称时,这才是真的但是,如果使用以斜杠开头的绝对名称,则将直接使用该布局。参见官方文件:

    当提供部分名称 时,Razor视图引擎会使用其标准发现过程搜索布局文件。首先搜索处理程序方法(或控制器(所在的文件夹,然后搜索共享文件夹。此发现过程与用于发现局部视图的过程相同

    在您的情况下,以/开头的布局名称/Areas/Identity/Pages/_Layout.cshtml不是部分名称。这就是您的页面无法发现布局的原因。为了解决此问题,请改用部分名称_Layout。(这可以通过一个_ViewStart.cshtml文件来完成,就像我上面所做的那样,不要为每一页添加它(

  3. 最后,您可能想知道为什么在使用AddDefaultIdentity()时它会正常渲染。正如您所发现的,AddDefaultIdentity()将添加默认的UI,它最终调用AddRelatedParts()方法。这样,当没有这样的布局或页面时,它就可以回退到默认的UI。例如,当您用Visual Studio构建Identity时,它提供了一个列表,您可以使用该列表来覆盖默认页面。上述/Areas/Identity/Pages/_Layout.cshtml来自默认的UI。

相关内容

  • 没有找到相关文章

最新更新