【问题标题】:Use a list or array to build a query string in MVC3在 MVC3 中使用列表或数组构建查询字符串
【发布时间】:2012-09-04 20:55:31
【问题描述】:

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

将参数添加到下个月的网址:

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。

感谢您的帮助!

【问题讨论】:

    标签: c# asp.net-mvc


    【解决方案1】:

    String.Join 可能是一种选择:

     String.Join(",", SelectedDivisions.ToArray())
    

    【讨论】:

    【解决方案2】:

    这可能是重复的:

    how may i add integer list to route

    简短的回答是:您不能使用帮助程序。您必须手动构建它。

    【讨论】:

    • 很有趣,但我正在使用 ActionResult,所以我无法在后端部分执行 Url.Action ......似乎我将不得不改变一些事情。
    【解决方案3】:

    我在这里找到了解决方案: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,它适用于我日历中的任何搜索。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-14
      • 2021-12-11
      • 1970-01-01
      • 1970-01-01
      • 2010-09-28
      • 1970-01-01
      相关资源
      最近更新 更多