Навигация из Зоны в Зону - PullRequest
0 голосов
/ 23 мая 2019

У меня есть несколько контроллеров в папке контроллера, не относящейся к области, и у меня есть некоторые контроллеры в папке Areas / Controllers.

Например: у меня есть EquipmentController, ContractsController в папке Controllers (не для области)

У меня есть контроллер SiteManagement в папке Areas / Controllers.

Я могу перейти к оборудованию (http://localhost:3384/Equipment), Контрактам (http://localhost:3384/Contracts) и SiteManagement (http://localhost:3384/SiteManagement/UsersAdmin)), чтобы просмотреть страницу без каких-либо проблем. Однако, когда я нажимаю на ссылку SiteManagement, я не могу перейти вернуться на страницу «Оборудование» или «Контракты», поскольку их ссылки добавлены с помощью SiteManagement / Contracts или SiteManagement / Equipment, и я получаю сообщение об ошибке «страница не найдена».

Я знаю, что есть проблема с маршрутизацией. Как мне исправить эту проблему?

Пример кода со страницы макета (которая находится в папке Views / Shared)

<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 Ответ

1 голос
/ 23 мая 2019

Контроллер не в пределах зоны может быть установлен, например, ниже

*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
        );
    }
}

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...