2

カレンダーを返すページを含む検索フォームがあります。一番上にいくつかの検索条件があり、それが1つの値だけの場合はすべて正常に機能しますが、リストの場合は機能しません。モデルで次の月の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

これは重複の可能性があります:

ルートに整数リストを追加するにはどうすればよいですか

簡単に言うと、ヘルパーを使用することはできません。手作業で作成する必要があります。

于 2012-09-11T21:17:56.953 に答える
0

String.Joinは1つのオプションです:

 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 に答える