我遇到路由问题,导航到某些页面(例如管理
Index
)会导致“找不到页面”错误,因为视图不在区域文件夹内,并且路由配置不正确指向适当的视图目录。
我尝试在我的
Program.cs
中配置路由,如下所示:
// Default routes
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
// Admin routes
app.MapControllerRoute(
name: "admin",
pattern: "{controller=Admin}/{action=Index}/{id?}");
但是,当我尝试访问位于“身份”文件夹中的管理页面或主页时,仍然遇到问题。
这是我的布局页面的相关部分:
<header>
<h3>Online Mart</h3>
@if (SignInManager.IsSignedIn(User))
{
if (User.IsInRole("admin"))
{
<nav class="nav-bar">
<a asp-controller="Admin" asp-action="Index">Dashboard</a>
<a asp-controller="Product" asp-action="Index">Products</a>
<a asp-controller="Category" asp-action="Index">Categories</a>
<a asp-controller="Orders" asp-action="Index">Orders</a>
<a asp-controller="Customers" asp-action="Index">Customers</a>
</nav>
}
else
{
<nav class="nav-bar">
<a asp-controller="Home" asp-action="Index">Home</a>
<a asp-controller="Shop" asp-action="Index">Shop</a>
<a asp-controller="Cart" asp-action="Index">Cart</a>
<a asp-controller="Orders" asp-action="Index">Orders</a>
<a asp-controller="Home" asp-action="Aboutus">About</a>
</nav>
}
}
else
{
<nav class="nav-bar">
<a asp-area="" asp-controller="Home" asp-action="Index">Home</a>
<a asp-controller="Shop" asp-action="Index">Shop</a>
<a asp-controller="Cart" asp-action="Index">Cart</a>
<a asp-controller="Orders" asp-action="Index">Orders</a>
<a asp-controller="Home" asp-action="Aboutus">About</a>
</nav>
}
<partial name="_LoginPartial" />
</header>
LoginPartial
查看:
@inject SignInManager<AppUser> SignInManager
@inject UserManager<AppUser> UserManager
<ul class="navbar-nav">
@if (SignInManager.IsSignedIn(User))
{
if (User.IsInRole("admin"))
{
<li class="nav-item dropdown nav-bar">
<a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="true">Admin</a>
<ul class="dropdown-menu">
<li>
<a class="dropdown-item text-dark" asp-area="Identity" asp-controller="Account" asp-action="Manage">Profile</a>
</li>
<li><hr class="dropdown-divider" /></li>
<li>
<a class="dropdown-item text-dark" asp-area="Identity" asp-controller="Account" asp-action="Logout">Logout</a>
</li>
</ul>
</li>
}
else
{
<li class="nav-item dropdown nav-bar">
<a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="true">User</a>
<ul class="dropdown-menu">
<li>
<a class="dropdown-item text-dark" asp-area="Identity" asp-controller="Account" asp-action="Manage">Profile</a>
</li>
<li><hr class="dropdown-divider" /></li>
<li>
<a class="dropdown-item text-dark" asp-area="Identity" asp-controller="Account" asp-action="Logout">Logout</a>
</li>
</ul>
</li>
}
}
else
{
<div class="nav-bar">
<a id="register" asp-area="Identity" asp-controller="Account" asp-action="Register">Register</a>
<a id="login" asp-area="Identity" asp-controller="Account" asp-action="Login">Login</a>
</div>
}
</ul>
首先,如果您使用的是内置脚手架身份页面。它们是“Razor 页面”,而不是“MVC”。他们只需要使用
路线app.MapRazorPages();
导航链接就像
<div class="nav-bar">
<a class="nav-link" asp-area="Identity" asp-page="/Account/Register">Register</a>
<a class="nav-link" asp-area="Identity" asp-page="/Account/Login">Login</a>
</div>
其次,根据您的代码,您应该有一个名为“admin”的区域。你只需要
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
它是一个路由模板,适用于以下区域文件夹结构。
如果你想指向其他位置的视图。你可以使用像
public IActionResult Index()
{
return View("~/{folderPath}/Index.cshtml");
}