【问题标题】:asp-action tag helper does not create the Area link properly with Endpoint Routingasp-action 在端点路由区域中无法正常工作
【发布时间】:2020-06-14 03:44:38
【问题描述】:

我使用 .net core 3.1.1

当我像这样使用 asp-action 时在 mvc 区域中

<a  asp-action="Index2">Index2</a>

未正确生成链接(缺少区域名称)

生成链接:http://localhost:49770/Home/Index2

但正确的链接是http://localhost:49770/admin/Home/Index2

我使用端点路由

app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllerRoute(
                name: "default",
                pattern: "{controller=Home}/{action=Index}/{id?}");

            endpoints.MapAreaControllerRoute(
                "area",
                "Admin",
                "{area:exists}/{controller=Home}/{action=Index}/{id?}"

            );
        });

但是何时使用旧路由(usemvc)asp-action 正确生成链接

http://localhost:49770/admin/Home/Index2

 app.UseMvc(routes =>
    {
      routes.MapRoute(
        name : "areas",
        template : "{area:exists}/{controller=Home}/{action=Index}/{id?}"
      );
    });

任何人都可以帮助我使用 asp-action 进行端点路由 谢谢

【问题讨论】:

  • 您好,欢迎来到 Stack Overflow。如果我的理解是正确的,我假设这些链接来自该区域内的 Razor 视图,并且您期望它们在 URL 中隐式包含区域名称,因为在给定上下文的情况下应该假设。对吗?
  • 不过,一般来说,您通常会使用asp-area 标签助手和asp-action 来指定目标区域(source)。

标签: c# .net asp.net-core asp.net-core-mvc


【解决方案1】:

您应该修改顺序以首先制作区域路线:

endpoints.MapAreaControllerRoute(
    "area",
    "Admin",
    "{area:exists}/{controller=Home}/{action=Index}/{id?}"


endpoints.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

这样&lt;a asp-action="Index2"&gt;Index2&lt;/a&gt; 将创建指向同一区域的操作方法的链接。

【讨论】:

    猜你喜欢
    • 2016-11-26
    • 2014-12-05
    • 2018-01-17
    • 2017-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多