ビュー内を介してコントローラーを呼び出そうとしてactionLink()
います。このコントローラは、TempData リポジトリからデータを取得します。ただ、どうやってTempData
もビューにリポジトリを設定してもコントローラーに渡らないような?ViewData
代わりに使うべきですか?そのようなシステムの推奨事項は何ですか?
ありがとう
ビュー内を介してコントローラーを呼び出そうとしてactionLink()
います。このコントローラは、TempData リポジトリからデータを取得します。ただ、どうやってTempData
もビューにリポジトリを設定してもコントローラーに渡らないような?ViewData
代わりに使うべきですか?そのようなシステムの推奨事項は何ですか?
ありがとう
TempData も ViewData もビューに設定することは想定されていません。ビューは、コントローラー アクション内のこれらの構造に格納されたデータを消費することになっています (実際にはそうではありません。ビューはビュー モデルを消費することになっていますが、それは別のトピックです)。
2 つのリダイレクト間で情報を保持する場合は、TempData を使用できます。データを読み取る別のコントローラーアクションにリダイレクトするコントローラーアクション内で設定する必要があります。
public ActionResult Foo()
{
SomeModel model = ...
TempData["foo"] = model;
return RedirectToAction("Bar");
}
public ActionResult Bar()
{
var model = TempData["foo"] as SomeModel;
...
}
そのため、コントローラ アクションは、データを設定する別のアクションからのリダイレクト後にこのアクションが呼び出された場合にのみ、TempData 構造からデータを取得する必要があります。ビューがある場合、これは、このビューがおそらくデータを TempData に設定するコントローラー アクションからレンダリングされたことを意味しますが、常にリスクが存在するためです (ビューがリクエストとリクエストの間で実行される場合)サーバー - AJAX など)、TempData は失われます。
あなたの場合、ビューがサーバーを呼び出す必要がある場合、基本的に 3 つの手法があります。
<form>
サーバーにデータを送信する入力フィールドを持つ HTML を使用します。TempData
ビューをレンダリングするコントローラーで、事前に値を設定する必要があります。値は、2 番目の (ActionLink) ビューをレンダリングするコントローラー アクションによって取得されます。