ASP.NET Core MVC 6/7:登录页_Layout配置异常问题求助
解决ASP.NET Core MVC 6/7登录页布局异常问题
问题根源
你的问题核心是:登录页(尤其是用Identity脚手架生成的页面)默认绑定了Identity区域自带的布局,而非你在~/Views/Shared/自定义的_Layout.cshtml。手动指定Layout = "_Layout";后,要么触发了Identity默认的导航组件加载,要么你的自定义布局里不小心混入了默认登录片段代码。
具体解决办法
办法1:给登录页单独做个极简布局
- 在
~/Views/Shared/新建_LoginLayout.cshtml,只保留登录页必需的结构(完全去掉导航栏):
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>@ViewData["Title"] - 你的站点名称</title> <link rel="stylesheet" href="~/css/site.css" /> </head> <body> <div class="login-container"> @RenderBody() @RenderSection("Scripts", required: false) </div> </body> </html>
- 在登录页顶部指定这个布局:
@{ Layout = "_LoginLayout"; ViewData["Title"] = "登录"; }
办法2:直接禁用登录页的布局
如果登录页不需要任何共享布局,直接在登录页顶部写:
@{ Layout = null; ViewData["Title"] = "登录"; }
注意:如果之前不声明Layout就显示不了,大概率是因为登录页是Identity生成的,默认用了Identity区域的布局。设置
Layout = null后,你需要在登录页里写完整的HTML结构(包括<html>、<head>、<body>标签)。
办法3:修改Identity区域的默认布局(用了Identity脚手架才需要)
如果登录页在~/Areas/Identity/Pages/Account/下,它默认用的是~/Areas/Identity/Pages/_Layout.cshtml:
- 打开这个文件,直接删掉里面的默认导航栏代码;
- 或者把这个布局的内容换成你自定义的
_Layout.cshtml内容,但要确保去掉@await Component.InvokeAsync("LoginPartial")这类会加载默认导航的代码。
额外排查点
- 检查你自定义的
_Layout.cshtml里有没有写@await Html.PartialAsync("_LoginPartial"),这行代码会引入默认的登录导航栏; - 确认
[Authorize]特性只加在DashboardController上,别误加到登录页的控制器/动作上。
内容的提问来源于stack exchange,提问作者Abdullah Al Mahmud Khan
相关产品推荐
相关产品推荐

