5

のredirecttoactionでクエリ文字列を設定するビューの参照ページ(グリッドのステータス)から抽出したさまざまなパラメータを使用してasp.net mvcビューでredirecttoactionコールを実行する必要があります。asp.net MVC

(私は隠しフィールドで)クエリ文字列の内容を(時には空、時には2つのパラメータなどで)持っているので、ルート値配列を作成する際に問題があります。

クエリ文字列をルート値の配列に変換するのに役立つヘルパーはありますか?あなたのクエリ文字列が辞書にし、RouteValueDictionaryへの辞書に変換する汎用的なソリューションを作成する

string querystring ="sortdir=asc&pag=5"; 
return RedirectToAction("Index", ConvertToRouteArray(querystring)); 
+0

はhttp://stackoverflow.com/questions/1067200/how-to-add-querystring-values-with-redirecttoaction-を見ます方法LQ = 1 – MVCdragon

+0

[これは解決策を持っている、あなたを助ける必要があります] [1] [1]:?http://stackoverflow.com/questions/1067200/how-to-add-querystring-values -with-redirecttoaction-method?lq = 1 – MVCdragon

答えて

8

:よう 何か。 RedirectToAction("actionName", {object with properties})を使用しての

var parsed = HttpUtility.ParseQueryString(temp); 
Dictionary<string,object> querystringDic = parsed.AllKeys 
    .ToDictionary(k => k, k => (object)parsed[k]); 

return RedirectToAction("Index", new RouteValueDictionary(querystringDic)); 
+0

これは単なる例であり、probl私は一般的なソリューションを探したいので –

+0

私は一般的なソリューションに私の答えを変更しました。 – Erwin

+1

新しいものを忘れてしまった:return RedirectToAction( "Index"、新しいRouteValueDictionary(querystringDic)); –

2

1つの制限はRedirectToAction()がRedirectToAction(ActionResult(), {object with properties})を受け入れる過負荷を持っていないので、あなたは、アクション名(およびおそらくコントローラ名)のための魔法の文字列を使用することを余儀なくされていることです。

あなたがT4MVC libraryを使用している場合、それは簡単に、単一のクエリ文字列パラメータ、オブジェクトのすべてのプロパティ、または全体の場合、Request.QueryStringを追加することができます2つの流暢APIのヘルパーメソッド(AddRouteValue(...)AddRouteValues(...))が含まれています。これらのメソッドは、T4MVC独自のActionResultオブジェクトで呼び出すことも、RedirectToAction()メソッドで直接呼び出すこともできます。もちろん、T4MVCはすべて魔法の弦を取り除くことです!

例:認証されていないリクエストのログインページにリダイレクトし、元のリクエストされたURLをクエリ文字列パラメータとして渡して、ログインに成功した後でそこにジャンプできるとします。次の構文例のいずれかが動作します:

return RedirectToAction(MVC.Account.LogOn()).AddRouteValue(@"returnUrl", HttpUtility.UrlEncode(Request.RawUrl)); 

または

return RedirectToAction(MVC.Account.LogOn().AddRouteValue(@"returnUrl", HttpUtility.UrlEncode(Request.RawUrl)));