Контроллер для пути не найден или не реализует IController в MVC - PullRequest
0 голосов
/ 06 июня 2018

У меня проблема с MVC.

У меня есть файл _Layout.cshtml со следующим кодом

@{Html.RenderAction("Menus", "Menu", new { ActiveMenuId = ViewBag.ActiveMenu });}

, и вызываемое действие выглядит так

[ChildActionOnly]
public ActionResult Menus(int ActiveMenuId)
{
    var model = GetMenus(context, ActiveMenuId);
    return PartialView("_Menu", model);
}

модель будет содержать такие детали меню, как ControllerName, ActionName и т. Д.

Частичное представление выглядит следующим образом

@model IList<App.Models.Menu>
<div class="collapse navbar-collapse" id="navbarColor01">
<ul class="navbar-nav mr-auto">
    @{
        foreach (var m in Model)
        {
            <li class="@m.ActiveClass">
                @{
                    <a href="@Url.Action(m.ActionName, m.ControllerName, new { area = m.Area })" class="nav-link"><span class="fas @m.IconClass"></span>@m.DisplayName</a>
                }
            </li>
        }
    }
</ul>

Когда foreach попадает в данные

Models.Menu
{
    ActionName: "Index",
    ControllerName: "Home",
    Area: "Area1",
    IconClass: "someClass",
    DisplayName: "Area1",
    ActiveClass: "someClass"
}

, он генерирует URL /Area1

И все же каким-то образом, если я нажал на это меню Area1, он выдаст ошибку

The controller for path '/Area1' was not found or does not implement IController.

Иконтроллер, который я вызываю внутри области, был именно этим.

namespace App.Areas.Area1.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            ViewBag.Title = "Area1";
            return View();
        }
    }
}

Вот Area1AreaRegistration.cs

namespace App.Areas.Area1
{
    public class Area1AreaRegistration : AreaRegistration 
    {
        public override string AreaName 
        {
            get 
            {
                return "Area1";
            }
        }

        public override void RegisterArea(AreaRegistrationContext context) 
        {
            context.MapRoute(
                name: "Area1_default",
                url: "Area1/{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
                namespaces: new [] {"App.Areas.Area1.Controllers"}
            );
        }
    }
}

А вот мой RouteConfig.cs

namespace App
{
    public class RouteConfig
    {
        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 },
                namespaces: new[] { "App.Controllers" }
            );
        }
    }
}

Надеюсь, вы, ребята, можете помочь мне с этим.

...