我如何解决 ASP.NET MVC 项目上的目录问题?每次我进入“身份”文件夹时,我的视图的文件夹位置都会改变?

问题描述 投票:0回答:1

我遇到路由问题,导航到某些页面(例如管理

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>
c# asp.net-mvc asp.net-core routes
1个回答
0
投票

首先,如果您使用的是内置脚手架身份页面。它们是“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?}");

它是一个路由模板,适用于以下区域文件夹结构。
enter image description here
如果你想指向其他位置的视图。你可以使用像

    public IActionResult Index()
    {
        return View("~/{folderPath}/Index.cshtml");
    }
© www.soinside.com 2019 - 2024. All rights reserved.