2011-12-13 6 views
10

レイアウトにナビゲーションバーが定義されたサイトがあります。ナビゲーションバーはサイトのいくつかのビューで使用され、データベース内の2つのクエリから生成された動的コンテンツがいくつかあります。ASP.NET MVC:Html.PartialまたはHtml.Actionを使用しますか?

私はこのメニューをレンダリングするベストプラクティス(部分的なビューで定義されている)が何であるか疑問に思っています。

私の知る限り、私はそれぞれのためのいくつかの長所と短所を、二つの方法でそれを行うことができます知っている:Html.Actionを使用して

: +それはレイアウト を使用しているビューから完全に独立します - これは、ページのセクションをレンダリングする追加のリクエストを追加します。 - Ajaxから呼び出されない部分ビューを返すActionメソッドを追加しています。 - それぞれのビューモデルは、私はいくつかのシナリオを持っているので、私はこれについてあなたの洞察力を本当に感謝ナビゲーションバー

に必要な情報が含まれている必要があり +ビュー全体 をレンダリングするための単純な要求:Html.Partialを使用して

私のサイトにこのようなものがあり、どちらが最善かわからない。

ありがとうございます!

答えて

14

特に、このメニューにデータベースからフェッチされた動的データが含まれている場合は、Html.Actionを使用します。利点は、あなたが完全に別のアクションで主なものからこのフェッチを完全に分離できるということです。さらに、子アクションの出力は、[OutputCache]属性を使用して修飾することでキャッシュできます。これにより、データが頻繁に変更されない場合にデータベースの負荷を軽減できます。

それはあなたがそれについて何かを誤解している必要がありますページ

のセクションをレンダリングするために余分な要求を追加します。クライアントからの追加の要求はありません。すべてが1回のリクエストで処理されます。コントローラーのインスタンス化とアクションの実行は追加されますが、クライアントからの新しいHTTP要求はありません。 2つのコントローラアクションが同じリクエストで実行され、その結果が1つのHTMLページに集約されてクライアントに送信されたかのようです。

+0

HTTP要求を1回だけ実行するのは当然ですが、アクションをレンダリングするオーバーヘッドが部分的なレンダリングのオーバヘッドを上回ることも事実です。 –

+4

@ NathanTaylor、それは本当です。部分的なレンダリングを超えるオーバーヘッドがあります。しかし、このオーバヘッドはsooooooooooooooooあなたが単にそれを受け入れる必要があります子どもの行動を使用してから得るすべての利点に比べて無視できるです。私はあなたが懸念の分離を得ることを意味する、あなたはきれいなコードを取得する、あなたは、これは、ええ、Html.Actionを使用して部分的にレンダリングのパフォーマンスでexeedされるキャッシュを取得します。 –

+0

私は確かに同意しない、私はちょうど事実を強調表示しています。 Html.Action FTW。 –

関連する問題