如何通过锚标记帮助器传递值数组?

时间:2018-08-09 17:46:38

标签: c# asp.net-core .net-core asp.net-core-2.0 asp.net-core-tag-helpers

我正在使用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 个答案:

答案 0 :(得分:2)

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

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

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

我正在使用Visual Studio及其所有的智能知识-当我使用此代码段时,通过绿色的波浪状和工具提示来警告我“属性'asp-route-status'已经存在。” < / em>。最终结果是,实际上只有指定的第一个值才传递到查询字符串中。

使用任何一种有效的数组方法,status的生成值就是数组{<1>}的生成值- System.String%5B%5D

看来,要实现您想要的目标,您将需要使用传统的ToString方法。看起来像这样:

UrlHelper

我发现了this的Github问题,其中最近的评论(2017-11-24)询问如何使用标签帮助器实现此目标,但截至今天(2018-08年)尚未回答该问题。 -10)。