我有一个搜索表单,其中包含返回日历的页面。在顶部,我有一些搜索条件,如果它只有一个值,一切都很好,但如果它是一个列表,就不行了。当我想在我的模型中为下个月建立url时,我有这样的东西:
public ActionResult GetUrl()
{
var action = GetBaseAction();
if (SelectedDivisions.Any()) action.AddRouteValue("SelectedDisions", SelectedDivisions.ToArray());
if (RoomId.HasValue) action.AddRouteValue("RoomId", RoomId.Value);
if (TeacherId.HasValue) action.AddRouteValue("TeacherId", TeacherId.Value);
if (Month.HasValue) action.AddRouteValue("Month", Month.Value);
if (Year.HasValue) action.AddRouteValue("Year", Year.Value);
if (Day.HasValue) action.AddRouteValue("Day", Day.Value);
return action;
}
Wich将参数添加到下个月的URL:
http://afi.local/coursesession/calendar?Month=9&年份=2012&天=18&ViewType=每周
但由于你可以选择多个部门,这是一个复选框列表,所以当我发布我的表格时,我会得到这个URL:
http://afi.local/coursesession/calendar?Month=9&年份=2012&天=18&ViewType=每周&SelectedDivisions=1&SelectedDivisions=2
问题是,如果我添加两次相同的键,就会引发异常,而且我不知道如何在查询字符串中使用多个除法来重建我的URL。
谢谢你的帮助!
这可能是一个重复:
我如何添加整数列表来路由
简单的答案是:你不能使用helper。你必须手工建造。
String.Join可能是一个选项:
String.Join(",", SelectedDivisions.ToArray())
我在这里找到了一个解决方案:https://stackoverflow.com/a/717732/245836
我基本上是这样做的:
var routeValues = new RouteValueDictionary();
for (var i = 0; i < SelectedDivisions.Count; i++)
{
routeValues["SelectedDivisions[" + i + "]"] = SelectedDivisions[i];
}
action.AddRouteValues(routeValues);
生成的URL不是很干净,但绑定工作正常:
http://afi.local/coursesession/calendar?SelectedDivisions%5B0%5D=1&所选分段%5B1%5D=2&所选分段%5B2%5D=3&月份=9&年份=2012&天=11&ViewType=每周
所以现在我可以复制粘贴该URL,它将适用于我日历中的任何搜索。