代码之家  ›  专栏  ›  技术社区  ›  clockwiseq

带参数的属性路由-附加路由Id值的锚定标记帮助程序

  •  0
  • clockwiseq  · 技术社区  · 5 年前

    我已经设置了“基本”路线启动.cs没有任何异常(一个用于标准布线,另一个用于区域)。具体如下:

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

    现在,有了这两个,我可以导航(尽管是手动的)到我想要的路线。下面是我对一个动作的属性路由:

    [Route("Admin/Artists/{artistId:int}/Albums")]
    public async Task<IActionResult> Albums(int artistId)
    {
        var albums = await Mediatr.Send(new GetAlbumsForArtistRequest { ArtistId = artistId });
    
        return View(albums);
    }
    

    我可以成功地浏览到那条路线 我的观点出现了。然后尝试使用锚定标记辅助对象:

    <a asp-area="Admin" asp-controller="Artists" asp-action="Albums" asp-route-artist-id="@ViewData["ArtistId"]" class="btn btn-info">Albums</a>
    

    生成的URL不正确(由于未定义此路由,因此引发异常):

    /Admin/Artists/Albums
    

    /Admin/Artists/558/Albums
    

    我试过在这方面找人帮忙 Anchor Tag Helper documentation

    0 回复  |  直到 5 年前
        1
  •  1
  •   Fei Han    5 年前

    正确的URL应该是: /Admin/Artists/558/Albums

    asp-route-artist-id="@ViewData["ArtistId"]" 对于锚定标记助手,这会导致问题。

    - 之间 artist id ,应该是 asp-route-artistid

    试验结果

    enter image description here

    推荐文章