2011-09-11 34 views
4

私はASP.NET MVCアプリケーションを開発していて、奇妙なことに走っています。私はこのような2つのコントローラ・アクションだRedirectToActionはクエリパラメータでリダイレクトされますか?

:まず

[CustomAuthorize(Roles = SiteRoles.Admin)] 
public ActionResult Review(int? id) 

[CustomAuthorize(Roles = SiteRoles.Admin)] 
[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Review(AdReview data) 

を、私は、これは項目のリストでWebページが表示されます、パラメータとしてnullを持つReviewアクションを呼び出します。アイテムは、IDが設定された最初のレビューアクションにリンクされます。

idがレビューアクションに提供されると、このアイテムの編集ウェブページが返されます。いくつかの変更の後に提出を押すと、2回目のレビューアクション(投稿)に終わります。ここでアイテムが保存されます。

これまでのところすべてうまくいきました。

は今、最後のレビューアクション(ポスト)に、私は最後に次のコードを得た:これは、再び最初のレビューアクションをトリガーする

return RedirectToAction("Review", "Ad"); 

を、問題は、それが以前のIDを提供するということですか? RedirectToActionはパラメータを提供しないと私は考えましたか?

+0

このhttp://stackoverflow.com/questions/1257482/redirecttoaction-with-をチェックパラメータ。あなたの場合は、次のようになります: 'return RedirectToAction(" Review "、new {id =" Ad "});' – Samich

+0

Samich>この例ではurl/Controller/Action/Controllerが生成されます。広告は動作しますが、URLは/ Ad/Reviewにする必要がありますか?前にリダイレクトしていましたが、新しいアクションにパラメータが転送されたことはありませんでしたか? – Banshee

+0

現時点では確認できません。または、 'return RedirectToAction(" Review "、new {id = null})'のように、idをnullに指定しますか? – Samich

答えて

4

私はRedirectToActionがパラメータを提供しないと考えましたか?

あなたの理解は間違っています。ターゲットURLに同じ名前のルートパラメータが含まれている場合、モデルステートに存在するパラメータは自動的に転送されます。この場合、idパラメータが(おそらく入力フィールドの一部またはURLの一部として)転記されており、ルート定義に最後にidトークンがあるため、元のインデックスアクションにリダイレクトすると、RedirectToActionメソッドはそれを埋めるでしょう。あなたが明示的にリダイレクトするときにidパラメータが送信されるべきでないことを指定することができ、この動作を回避するための回避策として

return RedirectToAction("Index", "Ad", new { id = "" }); 
関連する問題