0

部分ビューを返し、ViewData を生成するメソッドを持つコントローラーがあります。次に、いくつかのメソッドがあり、それぞれが Json オブジェクトと ViewData を返します。ただし、ViewData は更新されません。リフレッシュするには?これは可能ですか?

public ActionResult FirstMethod() {
    ViewData["someList"] = ...;
    return PartialView(someOtherList);
}

public JsonResult SomeMethod()
{
    ViewData["someNewList"] = ...;
    return new JsonResult { ... };
}

ただし、FirstMethod() の後に SomeMethod() が呼び出されますが、ビューで使用する ViewData は someList です。

4

1 に答える 1

2

これは可能ですか?

いいえ、できません。ViewData は弱く型付けされたディクショナリであり、コントローラーとビューの間で情報を渡すために使用できます (使用はお勧めしませんが)。その有効期間は、コントローラー アクション実行パイプラインの有効期間に関連付けられています。したがって、ビューがレンダリングされたら終了です。コントローラー、ビュー、ViewData などはもう存在しません。クライアント ブラウザでレンダリングされる HTML のみ。

次に、AJAX 要求をサーバーに再度送信します。これは完全に新しいリクエストで、最初のリクエスト (最初にビューをレンダリングするために使用されたもの) とは関係がないため、コントローラーの新しいインスタンスが独自の ViewData で作成されます。JSON を返すコントローラー アクションで ViewData を設定しても意味がありません。このアクションは JavaScript で呼び出されるため、コントローラーから JavaScript 成功ハンドラーに渡すすべての情報は、返す JSON オブジェクトの一部である必要があるためです。

于 2012-05-29T06:45:26.923 に答える