13

私はまだ Html.Actionasp.netmvcの主な目的を取得していません。Html.Partial部分的なビューをロードする必要があるとき、またはビュー内のコードを分割してクリーンアップしたいときはいつでも使用しています。

これらすべてにどこHtml.Actionに当てはまりますか(たとえば、どこで使用し、使用しHtml.ActionないHtml.Partial)?

編集

答えは、動的データにHtml.Actionを使用することのようです。動的データにも部分ビューを使用できるため、これはわかりません。

たとえば、私のサイトのユーザーが行を編集した場合です。メソッドに対してajax呼び出しが行われ、dbからその行を取得します。次に、すべてのデータが編集できる状態になっているフォームの部分ビューを返します。エラーが発生した場合は、エラーメソッドを使用してjsonの結果を返し、JavaScriptがそれを消費してユーザーに警告します。

すべてが良ければ、レンダリングされたhtmlはjqueryダイアログに入れられ、ユーザーに表示されます。

代わりにアクションを使用させる「ChildActionOnlyAttribute」を使用できるからですか?

4

6 に答える 6

12

Ankurは正しい考えを持っていますが、概念をさらに単純化できると思います。

私にとって、それはどのようになります

をレンダリングしたいかはわかっているが、どのようにレンダリングするかがわからない場合は、パーシャルを使用して、情報のレンダリング方法を決定します。たとえば、ビューモデルが請求書用である場合があります。請求書ビューモデルには、請求書の項目の列挙可能性を含め、請求書自体について必要なすべての情報がすでに含まれている可能性があります。パーシャルは、自己完結型であるように、ラインアイテムに適している場合があります。すでに広告申込情報の詳細(what)がありますが、パーシャルはレンダリング方法(how)を処理します

反対に、請求書ビューモデルには顧客IDが含まれているが、実際の顧客の詳細は含まれていない可能性があります。ここではwhatがないため、顧客IDをアクションに渡すと、必要なデータが取得され、ビューに渡されて、適切に見えるようにレンダリングされます

したがって、要約すると、処理するすべてのデータがすでにある場合は、Partialを使用するだけですが、取得する必要のある情報が不足している場合は、Actionの方が適しています。

これが端で本当に曖昧になるのは、部分ビューにAjax(または他のテクノロジー)を介して独自のデータを取得する機能が含まれている場合です。その場合、私の例では顧客の詳細部分を部分的にすることで回避でき、クライアントが応答を受け取った後、Ajaxを使用して必要なデータを取得できる可能性があります。しかし、そのようなことが実装にとって意味があるのであれば、それはあなた次第です。

補遺: ASP.NET MVC Coreを試してみることにした場合、ChildActionsは使用できなくなります。この場合、選択できるのは、部分ビュー、ajax、またはコンポーネントの新しく導入された機能に限定されます。最後のものはChildActionsに似ていますが、実装方法が少し異なります。

于 2012-09-25T17:24:34.070 に答える
2

おそらく、例はこれをより明確にするでしょう。

すべてのページに表示されるメニューがあるとしましょう。そのため、それをレイアウトに配置します。メニューは変更されません。基本的なナビゲーションリンク、[ホーム]、[バージョン情報]、[お問い合わせ]などがあるため、通常の部分ビューを使用するだけです。コンテンツは静的であるため、これは正常に機能します。データを取得するためにデータベースにアクセスする必要はありません。を使用できます@Html.Partial("Menu");

後で、データベースからすべてのリンクを取得するようにメニューを変更する必要があると判断しました。部分ビューを更新して、List<string>リンクごとに1つのモデルを作成します。

これで、部分ビューのみを使用する場合は、すべてのアクションでデータベースにクエリを実行してリンクのリストを取得する必要があります。また、すべてのビューのすべてのモデルにList<string>リンクのプロパティが必要です。これにより、これを渡すことができます。メニューの部分ビューに移動します。これは悪い考えです。

代わりに、新しい子アクションを作成します。GetMenuLinks()これにより、データベースにクエリを実行してリンクをとして取得し、List<string>これを部分ビューに渡します。これにより、チャイルドアクションが独自のデータの取得を担当します。つまり、このクエリを1か所にまとめるだけで済みます。たとえば、「About Us」アクションでは、メニューのリンクのリストを取得する必要はありません。

于 2012-09-25T22:31:14.687 に答える
1

部分ビュービュー 間でビューマークアップのサブセクションを共有するために使用します。部分ビューには、インラインコード、HTMLヘルパーメソッド、および他の部分ビューへの参照を含めることができます。部分ビューはアクションメソッドを呼び出さないため、ビジネスロジックの実行に使用することはできません。

子アクション ビジネスロジックを含める必要がある再利用可能なUIコントロールまたはウィジェットを作成するために使用します。子アクションを使用すると、アクションメソッドが呼び出され、ビューがレンダリングされ、結果が応答ストリームに挿入されます。

于 2013-06-22T09:52:22.887 に答える
0

Html.Action()ビューモデルに含めたくないdynaimcコンテンツ(たとえば、サイドバーのユーザー情報)をロードするために使用します。これは、入力ビューモデルと出力ビューモデルを同一に保つのに非常に役立ちます。

私は常に、呼び出しているコントローラーメソッドにHtml.Action()を適用することと組み合わせて使用​​し、URLを介してHTMLフラグメントにアクセスできないようにすることに注意してください。ChildActionOnlyAttribute

于 2012-09-25T16:56:13.747 に答える
0

この質問はここで答えられます(そして149回選出されます!):

Html.Partial vs Html.RenderPartial&Html.Action vs Html.RenderAction

申し訳 ありませんが、これらの投稿を送信することを目的としています

お役に立てれば。

于 2012-09-25T18:13:18.267 に答える
0

問題のセクションをレンダリングするためにビューモデルのサブセットが必要な場合は、Html.Partialを使用します。通常、これは作業内容と関係があります。フォームのサブセクション、メインビューに関連する関連コンテンツなどである可能性がある場合。パーシャルは、親ビューからモデル情報を受け取ります。

それ以外の場合は、Html.Actionを使用して、ナビゲーションピース、脇白、その他の注意散漫など、メインビューから独立したコンテンツをレンダリングします。Html.Actionは、親ビューではなく、コントローラーによって提供される独自のモデルを使用します。

于 2012-09-25T18:20:28.500 に答える