【发布时间】:2015-02-12 16:02:39
【问题描述】:
在我的 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,我的控制器很好地传递了一个具有以下类类型的对象:
// 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 的标准基础架构可以处理描述为输入的多键。是否没有标准的基础设施可以反过来处理它?我错过了什么吗?
【问题讨论】:
-
感谢您的回答,但这两个答案对我来说似乎都是一种黑客行为。我的印象是我做错了什么。 RouteValueDictionary 不能使用“多个”(
<select multiple>,在我的情况下是<input type="checkbox">具有相同名称)值吗?很难想象微软提出了一个没有包含整个 HTML FORM 模型的抽象......
标签: c# asp.net-mvc-4 routevalues