我遵循以下示例:
ASP.NET MVC - Pass array object as a route value within Html.ActionLink(...)
但是,我的动作总是用null
调用。我究竟做错了什么?
foreach (OrderDetail od in order.OrderDetails)
{
rvd.Add("key" + count++, productID);
rvd.Add("key" + count++, productName);
}
@Html.ActionLink(linkText, "Renew", "Orders", rvd, new Dictionary<string, object>())
查询字符串已正确生成,例如
?key0=dog&key1=cat&key2=fish...
,但是在下面的“操作”中得到了空参数:public ActionResult Renew(RouteValueDictionary rvd)
{
// 'rvd' is null here!
}
请注意:我不知道参数的数量。
最佳答案
我想象发生了什么事,您期望模型绑定程序将您的数组绑定到RouteValueDictionary,但是模型绑定程序不知道key0 = dog&key1 = cat&key2 = fish应该是字典。我建议更改您的代码以接受字符串数组。为此,您的查询字符串需要看起来像这样:?rvd=dog&rvd=cat&rvd=fish
而你的行动...
public ActionResult Renew(string[] rvd)
{
// 'rvd' is no longer null here!
}
重要的部分是
rvd
是操作中的参数名称,以及查询字符串中每个元素的名称:?rvd
= dog&rvd
= cat&rvd
= fish。如果您确实想使用字典而不是字符串数组,那么您的查询字符串应如下所示:?rvd[0]=dog&rvd[1]=cat&rvd[2]=fish
,为每个项目提供一个数组索引,但是您可能必须将参数从RouteValueDictionary更改为Dictionary<string,string>
,不太确定。 More info here。编辑:看到达林关于绑定到词典的评论,因为我认为他是正确的。您可能必须为Html.ActionLink编写自己的扩展名,该扩展名接受数组(或任何
OrderDetails
是)并将查询字符串创建为数组。 This看起来是一个很好的起点。