2

ビューを返す前に TempData を設定するコントローラーがあります。

public ActionResult Edit(int id, int? order)
{
    Route route = new Route();
    // Do Work
    TempData["Route"] = route;
    return View(new FormViewModel(route, obj1, obj2));
}

このビューには、削除と呼ばれる別のアクション メソッドに移動するリンクを含む部分ビューが含まれています。削除リンクのコードは次のとおりです。

<%= Html.ActionLink("Delete", "Delete", new { order = item.Order })%>

削除アクション メソッドのコードは次のとおりです。

public ActionResult Delete(int order)
{
    Route route = (Route)TempData["Route"];
    // Do Work
}

私が抱えている問題は、TempData["Route"]; を取得しようとするときです。削除アクション メソッドから null が返されます。

問題は、これが Post ではなく Get であるということでしょうか? もしそうなら、フォーム内から削除 ActionMethod に投稿するにはどうすればよいですか?

4

3 に答える 3

7

TempData は 2 つのリクエスト間で保持されます。Edit アクションの ReturnView メソッドは何を返しますか? 私が知る限り、これは Controller クラスで定義された標準メソッドではありません。このメソッドでリダイレクトしていますか (つまり、RedirectToRouteResult を返していますか)?

また、編集アクションと削除アクションの間に発生する可能性のある他のリクエストはありますか? たとえば、ajax リクエスト。

一般に、TempData を使用して何かを長期間保持することはお勧めできません。通常、パターンは次のとおりです。

public ActionResult Update() 
{
    // When you put something into the TempData dictionary you usually
    // redirect immediately to an action that will use the object stored
    // inside.
    TempData["something"] = "something";
    return RedirectToAction("success");
}

public ActionResult Success() 
{
    var something = TempData["something"];
    return View();
}

何かをより長く保持する必要がある場合は、Session を使用する必要があります。

于 2009-07-28T10:05:41.860 に答える
1

TempDataが機能しないもう1つの要因は、アプリが分散システムの下にある場合です。

于 2010-10-05T04:18:17.160 に答える