从区域导航到非区域视图

时间:2019-05-23 15:33:28

标签: asp.net-mvc model-view-controller

我在非Area Controller文件夹中有一些控制器,而在Areas / Controllers文件夹中有一些控制器。

例如:我在Controllers文件夹(非区域)中有EquipmentController,ContractsController

我在Areas / Controllers文件夹中有一个名为SiteManagement的控制器。

我可以导航至设备(http://localhost:3384/Equipment),合同(http://localhost:3384/Contracts)和站点管理(http://localhost:3384/SiteManagement/UsersAdmin)视图页面,而不会出现任何问题。但是,当我单击SiteManagement链接时,我无法导航回到“设备或合同”页面,因为它们的链接附加了SiteManagement / Contracts或SiteManagement / Equipment,并且出现页面未找到错误。

我知道路由存在问题。如何解决此问题?

“布局”页面(位于“视图” /“共享”文件夹中)的示例代码

<li class="has-sub">
    <a href="collapsed-sidebar.html"><i class="icon-doc-text"></i><span class="title">Contracts</span></a>
    <ul class="nav collapse">
        <li><a href="@Url.Action("Create", "Contract")"><span class="title">Create New Contract</span></a></li>
        <li><a href="@Url.Action("Index", "Contract")"><span class="title">View Contracts</span></a></li>
    </ul>
</li>
<li class="has-sub">
    <a href="collapsed-sidebar.html"><i class="icon-doc-text"></i><span class="title">Equipment</span></a>
    <ul class="nav collapse">
        <li><a href="@Url.Action("Create", "Equipment")"><span class="title">Create New Equipment</span></a></li>
        <li><a href="@Url.Action("Index", "Equipment")"><span class="title">View Equipment</span></a></li>
    </ul>
</li>

<li class="has-sub">
    <a href="@Url.Action("Index", "Admin")" title="Adminstrator" aria-expanded="true">
        <i class="icon-layout"></i><span class="title">Adminstrator</span>
    </a>
    <ul class="nav collapse">
        <li><a href="@Url.Action("Index", "UsersAdmin", new {Area="SiteManagement" })"><span class="title">Users</span></a></li>
        <li><a href="@Url.Action("Index", "RolesAdmin", new {Area="SiteManagement" })"><span class="title">Roles</span></a></li>
    </ul>
</li>

路由配置代码

 public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
        }

站点管理区域注册

public override void RegisterArea(AreaRegistrationContext context)
        {
            context.MapRoute(
                "SiteManagement_default",
                "SiteManagement/{controller}/{action}/{id}",
                new { action = "Index", id = UrlParameter.Optional }
            }

预期结果: 我希望能够轻松地在区域站点和非区域站点之间导航。

1 个答案:

答案 0 :(得分:1)

可以例如在下面设置

不在区域内的控制器

*set the Area Empty*

@Url.Action("actionName", "controllerName", new {Area=""} ) 

因此,在您的情况下,我们可以:

<a href="@Url.Action("Create", "Contract", new {Area=""})"><span class="title">Create New Contract</span></a>

下面是我的路由配置的样子。可能也有帮助

public class RouteConfig {
    public static void RegisterRoutes(RouteCollection routes) {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.IgnoreRoute("{resource}.ashx/{*pathInfo}");

        routes.MapMvcAttributeRoutes();
        AreaRegistration.RegisterAllAreas();
        routes.MapRoute(
            name: "Default", // Route name
            url: "{controller}/{action}/{id}", // URL with parameters
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
        );
    }
}

谢谢