0

私が知る限り、MVC は部分ビューをメイン ビューとは異なる方法で扱っているようです。メインビュー内のオブジェクトにアクセスできるように見えますが、メインコントローラーアクションが返されたときにそのオブジェクトが破棄される場合、その子ビューにはアクセスできません(私の質問 here を参照してください)。

これは、メインコントローラーアクションのオブジェクトが破棄された後、AJAX またはその他のメソッドを介してこれらの部分ビューの非同期更新を容易にするためだと思います。これは私にとって完全に理にかなっています。

私が現在部分ビューを使用しようとしている方法では、この非同期更新機能は必要ありません。部分的なビューをすべて切り取ってまとめることもできますが、探しているのは、すべてのビューを 1 つの巨大なファイルにまとめるのではなく、ビューを小さなチャンクに分割する方法にすぎません。

理想的には、コントローラーからビューにオブジェクトを渡し、そのオブジェクトをビューと子/サブビューで利用し、ビューとそのサブ/子ビューが終了した後にのみオブジェクトを破棄できるようにしたいと考えていますそれを使用しています。

編集 - 例の追加

1 つのファイルに大きな複雑なビューがあります。各行が実際にはビュー マークアップとコードのより大きく、より複雑なブロックであると想像してください。

ViewStuff.cshtml

ViewStuff
ViewStuff
MoreViewStuff
MoreViewStuff
MoreViewStuff
ViewStuff
EvenMoreViewStuff
EvenMoreViewStuff
EvenMoreViewStuff
ViewStuff

利便性とメンテナンスのために、このビューをいくつかの個別のファイルに分割し、その一部をサブビューに効果的に抽出します。たとえば、「抽出メソッド」リファクタリングのようなものです。

ViewStuff.cshtml

ViewStuff
ViewStuff
RenderPartialViewOf MoreViewStuff
ViewStuff
RenderPartialViewOf EvenMoreViewStuff
ViewStuff

MoreViewStuff.cshtml

MoreViewStuff
MoreViewStuff
MoreViewStuff

EvenMoreViewStuff.cshtml

EvenMoreViewStuff
EvenMoreViewStuff
EvenMoreViewStuff

私が知る限り、部分ビューがこれに対する答えのようですが、使用できる方法はたくさんあるようです。私が得ている問題は、コントローラーのアクションが返されたときに破棄されるビューにコントローラーがオブジェクトを渡していることです。

「all in one file」のシナリオでは、メソッドが戻る前にビュー全体が構築され、オブジェクトが破棄されるため、オブジェクトをうまく利用して完全なビューを構築できます。ただし、これは理想的ではありません。ビュー ファイルが大きく、長く、モノリシックであり、後で一部が重複する可能性があるためです。

「複数のファイル」のシナリオでは、まだ破棄されていないため、メイン ビューはオブジェクトに問題なくアクセスできます。しかし、部分ビューがオブジェクトを取得する前に、メインのコントローラー アクション メソッドが戻り、オブジェクトを破棄します。その結果、部分ビューでエラーが発生し、使用できなくなったオブジェクトを探しています。

私が欲しいのは、コントローラー メソッドがオブジェクトを破棄する前に、複数の編成されたチャンクから作成された完全なビューを構築する方法です。

繰り返しますが、このオブジェクトで何をしているのか、コントローラー内の using ステートメントなどに関するより具体的なコードについては、他の質問を参照してください。

4

2 に答える 2