У меня проблема с 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" }
);
}
}
}
Надеюсь, вы, ребята, можете помочь мне с этим.