4

ASP.NET MVCアプリケーションに取り組んでいて、奇妙なことに遭遇しました。

私はこのような2つのコントローラーアクションを取得しました:

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

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

まずReview、パラメータとしてnullを使用してアクションを呼び出します。これにより、アイテムのリストを含むWebページが表示されます。アイテムは、IDが設定された最初のレビューアクションにリンクされています。

レビューアクションにIDが提供されると、このアイテムの編集Webページが返されます。いくつかの変更の後で送信を押すと、2番目のレビューアクション(投稿)になります。ここにアイテムが保存されます。

これまでのところすべて問題ありません。

さて、最後のレビューアクション(投稿)で、最後に次のコードを取得しました:

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

これにより、最初のレビューアクションが再度トリガーされます。問題は、前のIDが提供されることです。私の考えでは、RedirectToActionはパラメーターを提供しませんか?

4

1 に答える 1

4

私の考えでは、RedirectToActionはパラメーターを提供しませんか?

あなたの理解は間違っています。ターゲットURLに同じ名前のルートパラメータが含まれている場合、modelstateに存在するパラメータは自動的に転送されます。この場合、id(おそらく入力フィールドの一部またはURLの一部として)投稿されているパラメーターがあり、元のインデックスアクションにリダイレクトすると、ルート定義idの最後にトークンが含まれるため、RedirectToActionメソッドが入力されますそれ。

この動作を回避するための回避策として、idリダイレクト時にパラメーターを送信しないように明示的に指定できます。

return RedirectToAction("Index", "Ad", new { id = "" });
于 2011-09-11T20:29:16.590 に答える