2

我有一个带有返回日历页面的搜索表单。在顶部,我有一些搜索条件,如果它只有一个值,但如果它是一个列表,则一切正常。当我想在我的模型中构建下个月的 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;
    }

将参数添加到下个月的 URL :

http://afi.local/coursesession/calendar?Month=9&Year=2012&Day=18&ViewType=weekly

但由于您可以选择多个部门,它是一个复选框列表,所以当我发布我的表单时,我会得到这个 URL:

http://afi.local/coursesession/calendar?Month=9&Year=2012&Day=18&ViewType=weekly&SelectedDivisions=1&SelectedDivisions=2

问题是,如果我添加 2 次相同的键,它会引发异常,并且我不知道如何使用查询字符串中的多个分区来重建我的 URL。

谢谢您的帮助!

4

3 回答 3

1

This is a possible duplicate:

how may i add integer list to route

The short answer is: you can't using the helper. You have to build it by hand.

于 2012-09-11T21:17:56.953 回答
0

String.Join may be one option:

 String.Join(",", SelectedDivisions.ToArray())
于 2012-09-11T21:14:50.443 回答
0

我在这里找到了解决方案: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&SelectedDivisions%5B1%5D=2&SelectedDivisions%5B2%5D=3&Month=9&Year=2012&Day=11&ViewType=weekly

所以现在我可以复制粘贴该 URL,它适用于我日历中的任何搜索。

于 2012-09-11T21:51:45.033 回答