我有一个.NET Core 2.0 MVC应用程序,其区域名为admin。
我想在_Layout.cshtml中有路由,例如/ controllers / manage / index,当不在某个区域时以及在admin等区域时都可以使用。使用HtmlHelper语法或TagHelper语法我该如何创建它?
期望的输出:
www.website.com/manage
我试过了
<a asp-area="" asp-controller="Manage" asp-action="Index" title="Manage">Manage</a>
不在某个区域时有效,但在管理区域内生成链接:
www.website.com/admin
我在启动配置(IapplicationBuilder应用程序)中注册了以下路由
// Route for areas
app.UseMvc(routes =>
{
routes.MapRoute(
name: "areas",
template: "{area:exists}/{controller=Home}/{action=Index}/{id?}"
);
});
// Default route
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
答案 0 :(得分:4)
问题是你要两次注册MVC。
// Route for areas
app.UseMvc(routes =>
{
routes.MapRoute(
name: "areas",
template: "{area:exists}/{controller=Home}/{action=Index}/{id?}"
);
});
// Default route
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
在这种情况下,最后一次注册会覆盖第一次注册,因此您实际上只注册了1条路线(并且没有区域路线)。
要解决此问题,您需要只注册一次MVC并将所有路由放在该实例中。
app.UseMvc(routes =>
{
// Route for areas
routes.MapRoute(
name: "areas",
template: "{area:exists}/{controller=Home}/{action=Index}/{id?}"
);
// Default route
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});