3

複数のページからコントローラーを呼び出しており、returnUrlパラメーターを使用して正しい呼び出し場所を返しています。

public ActionResult EmailOrder(int id, string returnUrl)
{
    var message = "The order has been emailed";
    if (!string.IsNullOrEmpty(returnUrl)) return Redirect(returnUrl);
    return RedirectToAction("Details", new { id, message });
}

を使用するときに追加情報をビューに戻すにはどうすればよいRedirect(url)ですか? message上記の例では、 に値がある場合に戻せるようにしたいと考えreturnUrlています。

4

1 に答える 1

5

別のアクション メソッドにリダイレクトしていて、新しいアクション メソッドでアクセスできるデータを渡したい場合は、ASP.MVC コントローラーの TempData プロパティを使用する必要があります。これは次のように使用します。

[HttpPost]
public ActionResult MyActionMethod(Order order) 
{
    // write your logic here to save the Order
    TempData["message"] = "here is some message";
     return RedirectToAction("Index");
}

TempData メンバーのデータは、リダイレクト後も保持されます。リダイレクトされたページでアクセス可能になり、その後削除されます。TempData のエントリを読み取ると、削除対象としてマークされます。

public ActionResult RedirectedMethod() 
{
    //Retrieve data from TempData.  It will then be marked for deletion
    var data = TempData["message"].ToString();
}

削除のマークを付けずに値を取得したい場合は、「Peek」メソッドを使用できます。

var data = TempData.Peek("message")

また、「Keep」メソッドを使用して、そうでなければ削除される値を手動で保持することもできます。

TempData.Keep("message")

TempData は TempDataDictionary 型です

TempData はバックグラウンドで ASP.Net セッション状態を使用するため、TempData を使用している場合はセッション状態をオンにする必要があることに注意してください。

TempData の詳細については、こちらを参照してください。

于 2013-02-21T15:27:37.627 に答える