在我的 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>
在选中第一个和第三个复选框时,Querystring被序列化?tag=1&tag=3
,我的控制器可以很好地通过以下类的类型将对象传递:
// 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 的标准基础结构可以处理描述为输入的多键。是否没有标准的基础设施可以反过来处理它?我错过了什么吗?