如何通过 Anchor Tag Helper 传递值数组?

How Do I Pass an Array of Values via Anchor Tag Helper?

我正在使用 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>

这似乎不可能 - 传递给 asp-route-status 的值应该是一个字符串,或者是一个无论如何都会被转换为字符串的值。您可以在 source code 中看到这一点,其中 RouteValues 属性 是 <string, string>.

的字典

让我们看一下您的第一个示例,它看起来像这样:

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

我正在使用 Visual Studio 及其所有智能感知魔法 - 当我使用此代码片段时,我会通过绿色波浪线和工具提示警告 "Attribute 'asp-route-status' already exists."。这里的最终结果是只有指定的第一个值实际传递到查询字符串中。

使用任何一种有效的数组方法,status 的生成值只是数组的 ToString - System.String%5B%5D.

看来,为了实现您想要的效果,您将需要回退到传统的 UrlHelper 方法。这是它的样子:

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

我发现 this Github 问题,其中最近的评论 (2017-11-24) 询问如何使用标签助手实现此目的,但该问题尚未得到解答今天 (2018-08-10).