gpt4 book ai didi

c# - 如何使用具有多个同名值的 RouteValues

转载 作者:行者123 更新时间:2023-11-30 19:16:06 25 4
gpt4 key购买 nike

在我的 ASP.NET MVC 4 应用程序中,我可以过滤多个标签。在 HTML 中,它看起来像这样:

<form>
<label>
<input type="checkbox" name="tag" value="1">One
</label>
<label>
<input type="checkbox" name="tag" value="2">Two
</label>
<label>
<input type="checkbox" name="tag" value="3">Three
</label>
<input type="submit" name="action" value="Filter">
</form>

选中第一个和第三个复选框时,查询字符串被序列化为 ?tag=1&tag=3 并且我的 Controller 很好地传递了具有以下类类型的对象:

// Filter class
public class Filter {
public ICollection<int> tag { get; set; }
}

// Controller method
public ActionResult Index(AdFilter filter)
{
string url = Url.Action("DoFilter", filter);
// url gets this value:
// "/controller/Index?tag=System.Collections.Generic.List%601%5BSystem.Int32%5D"
// I would expect this:
// "/controller/Index?tag=1&tag=3"
...
}

但是,调用 Url.Action 会导致序列化集合的类型名称,而不是实际值。

如何做到这一点?


MVC 的标准基础架构可以处理描述为输入的多键。难道没有可以反过来处理它的标准基础设施吗?我错过了什么吗?

最佳答案

您可以通过以下方式进行:

string url = Url.Action("DoFilter", TypeHelper2.ObjectToDictionary(filter) );

TypeHelper2.ObjectToDictionary 是 .NET 内部方法的修改版本,可以在此 two file gist 中找到.

更改的行为:当项目实现 IEnumerable 时,每个项目都有一个条目在返回的字典中以 "Name[index]" 作为键创建(索引基于 0)。这是可能的,因为 MVC Controller 的绑定(bind)器可以处理 tag=1&tag=3tag[0]=1&tag[1]=3 查询字符串。

关于c# - 如何使用具有多个同名值的 RouteValues,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28482103/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com