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

如何通过锚定标记助手传递值数组?

  •  -1
  • Brandon  · 技术社区  · 6 年前

    我在用 Asp.Net Core 2.1 Pages

    public async Task OnGetAsync([FromQuery(Name = "status")] string[] myValues)
    {
    
    }
    

    我试图从 anchor tag helper ,但我得到的 myValues 是一个项目。如果我手动键入要镜像的查询字符串 MyRoute?myValues=A&myValues=B ,按预期工作。我试过以下方法,但没有成功。

    <a asp-page="/MyPage" asp-route-status="A" asp-route-status="B">Click</a>
    
    <a asp-page="/MyPage" asp-route-status="new [] { A, B }">Click</a>
    
    <a asp-page="/MyPage" asp-route-status="@(new [] { A, B })">Click</a>
    
    @{  var list = new string[] { "A", "B" };}
    <a asp-page="/MyPage" asp-route-status="@list">Click</a>
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   Kirk Larkin    6 年前

    这似乎不可能-传入的值 asp-route-status 应该是一个字符串或一个值,然后无论如何都将其转换为字符串。你可以在 source code ,其中 RouteValues 属性是的字典 <string, string> .

    让我们看一下您的第一个示例,如下所示:

    <a asp-page="/MyPage" asp-route-status="A" asp-route-status="B">Click</a>
    

    我正在使用Visual Studio及其所有的intellisense魔术-当我使用这个代码片段时,我会通过一个绿色的蠕动和工具提示警告我 “属性”ASP路由状态已经存在。 . 这里的最终结果是,只有指定的第一个值实际传递到查询字符串中。

    使用任一有效数组方法,生成的 status 只是一个 ToString 阵列的- 系统。字符串%5B%5D .

    似乎为了达到你想要的,你需要回到传统的 UrlHelper 接近。下面是它的样子:

    <a href="@Url.Page("/MyPage", new { status = new [] { "A", "B" } })">Click</a>
    

    我发现 this Github问题,最近的评论(2017-11-24)询问如何使用标签帮助器实现这一点,但截至今天(2018-08-10),问题仍未得到回答。