6

RenderActionオブジェクトの拡張メソッドを使用してHtmlHelper、サイドバーなどをページにレンダリングするのが好きです。これにより、そのような各部分のデータ アクセス コードをコントローラーの個別のメソッドに保持できるからです。抽象コントローラー ベースを使用して、既定の "サイドバー戦略" を定義できます。これは、必要に応じて具象コントローラーでメソッドをオーバーライドすることで改良できます。

私がこのアプローチで抱えている唯一の「問題」は、RenderAction既に実行中のコントローラーからのアクションをレンダリングする場合でも、常にコントローラー クラスのニュース インスタンスを作成するように構築されていることです。私のコントローラーの中には、メソッドでデータ検索を行うものがありますが、ビューでメソッドInitializeを使用するとRenderAction、同じリクエストでこれが数回発生します。

RenderAction呼び出されるアクションメソッドが「親」アクションと同じコントローラークラスにある場合、コントローラーオブジェクトを再利用する代替手段はありますか?

4

1 に答える 1

1

コントローラでthis。[ActionName]を呼び出すことができます。

たとえば、ホームコントローラのAboutアクションメソッドのthis.Index()を使用すると、コントローラの初期化を再度実行せずにインデックスビューがレンダリングされます。ただし、これはページ全体でのみ機能します。

renderPartialは機能しますが、「要素」(サイドバーなど)に親のビューモデルで必要なすべてのデータが含まれていることを確認する必要があります。

例:RenderPartial( "SideBars"、ViewData.Model)。ViewModelにパーシャルに必要なものがすべて含まれている場合は、それらを共有ビューの上に追加でき、コントローラーは最初のViewMoelを設定するだけで済みます。

親切、

ダン

于 2009-12-13T13:25:11.083 に答える