【问题标题】:How to combine usage of asp-all-route-data and a list of ids in query string如何结合使用 asp-all-route-data 和查询字符串中的 id 列表
【发布时间】:2021-05-04 08:58:36
【问题描述】:

在 ASP.NET 中,asp-all-route-data 非常适合将变量传递到锚标记。但是现在我正在尝试添加一个 id 列表并且没有太多运气。 asp-all-route-data 接受不能有重复键的 IDictionary。但我需要绑定到来自查询字符串的列表,例如?myParams=1&myParams=2(由ASP.NET out of the box model binding 指定)。

var myParams = new List<int> {0,1,2};
var routeData = new Dictionary<string, string>();
foreach (var myParam in myParams)
{
  routeData.Add(nameof(myParams), myParam.ToString());
}

我尝试在重复键异常中添加结果。

var myParams = new List<int> {0,1,2};
var routeData = new Dictionary<string, string>();
for (var i = 0; i < myParams.Count; i++)
{
  var myParam = myParams[i];
  routeData.Add($"{nameof(myParams)}{i}", myParam.ToString());
}

导致没有模型绑定。

这里是完整性的剃刀:

<a asp-route="@routeName" asp-all-route-data="@routeData">click me</a>

【问题讨论】:

    标签: asp.net asp.net-core .net-core asp.net-core-mvc model-binding


    【解决方案1】:

    在进一步研究这个问题时,我实际上找到了答案,所以将在这里分享。

    事实证明我很接近,但不是命名约定

    $"{nameof(myParams)}{i}"
    

    应该是的

    $"{nameof(myParams)}[{i}]"
    

    详见Microsoft documentation for model binding

    完整代码示例:

    var myParams = new List<int> {0,1,2};
    var routeData = new Dictionary<string, string>();
    for (var i = 0; i < myParams.Count; i++)
    {
      var myParam = myParams[i];
      routeData.Add($"{nameof(myParams)}[{i}]", myParam.ToString());
    }
    

    这会产生一个查询字符串(基于我设置的路由):

    ?myParams[0]=0&myParams[1]=1&myParams[2]=2
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多