У нас есть приложение MVC с различными областями. В данный момент регистрируется только одна область (определенная в конфигурации), и регистрация маршрута не выполняется при регистрации области. Я столкнулся с проблемами с маршрутизацией, поскольку метод Url.Action прекратил работу. Мой упрощена RouteConfig выглядит следующим образом:MVC5 Url.Action возвращает null внутри области
routes.MapRoute(
name: "Second",
url: "second/{action}/{id}",
defaults: new { controller = "Second", action = "Action", id = UrlParameter.Optional },
namespaces: new[] { "MvcApplication1.Areas.MyArea.Controllers" }
).DataTokens["area"] = "MyArea";
routes.MapRoute(
name: "Home",
url: "home/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
namespaces: new[] { "MvcApplication1.Controllers" }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
namespaces: new[] { "MvcApplication1.Controllers" }
);
Проблема заключается в том, что, когда я пытаюсь вызвать @Url.Action("Index", "Home")
внутри Action.cshtml во Втором контроллере в MyArea возвращает нуль. Когда я вызываю то же самое в Index.cshtml в Home controller, он работает хорошо. Я узнал, что когда я использую @Url.Action("Index", "Home", new {Area = ""})
в Action.cshtml, он тоже хорошо работает, но почему это происходит? Как я могу избежать этого, чтобы иметь возможность звонить только @Url.Action("Index", "Home")
без значений маршрута?