MVCではHtmlを用いる.RenderPartialかHtmlか.RenderActionまたはHtml.Partial-Xia.CJ

3861 ワード

Asp.Net MVCではRazorビューエンジンを使用していますが、あなたはまだではありませんか?....
Asp.Net MVCにはこの3つのHtmlHelperの拡張方法がある
Html.Partial:ビューの内容を直接文字列を生成して返します.
Html.RenderPartialメソッドは現在のHttpContextに直接出力し、
そしてHtml.RenderActionはActionも呼び出します.Controller→Model→Viewの順序をもう一度実行します.
したがって、ビューでの使用方法は異なります.
@

{

    Html.RenderPartial("Index");

 }

@

{ 

    Html.RenderAction("Index");

} 

@Html.Partial("Index") //(        )
注意:RenderPartial、RenderActionコードフォーマット、末尾にセミコロンがあります.
Partialは@Html.Partial(「Index」)のように、末尾にセミコロンはありません.
ここでRenderPartialでは、RenderActionメソッドは文字列を返すのではなく、呼び出しビューテンプレートの出力ストリームにコンテンツを直接出力します.
そしてHtml.RenderActionは具体的なactionを呼び出すとき、主actionのmethodと関係があります.
メインactionはgetで、彼もgetで、メインmethodはpostで、彼もpostを調整します.
以下はhttp://www.cnblogs.com/tianyaxiang/archive/2011/12/11/RenderPartial-RenderAction.htmlから

What is Html.RenderPartial


Html.RenderPartialはAspにいます.NetMvcではPartialViewを呼び出すために使用されます.PartialViewは基本的にAspです.NetWebformのUserControl.呼び出しも簡単で、ビューでPartialViewの名前をパラメータとして渡せばOKです.例:<% Html.RenderPartial("YourPartialView", YourData); %>YourDataはオプションのパラメータです.ある場合、YourDataはPartialViewのModelに割り当てられます.ない場合は、RenderPartialを呼び出すViewのModeとViewDataがPartialViewに渡されます.つまり、PartialViewのデータは呼び出したViewから来ています.

What is Html.RenderAction


Html.RenderActionでは、アクションを直接呼び出し、現在の呼び出しのViewに返された結果を直接表示できます.例:<% Html.RenderAction("Show", "Tag"); %>TagControllerのShowメソッドが呼び出されます.このとき呼び出されるのはActionメソッドなので、データベース、ファイルなどからデータを取得したり、データを書いたりして結果を返すなど、やりたい操作を完了することができます.[OutputCache(Duration=6000)] public   ActionResult Show() {      var tagData =  null ;      //Get data from database      //tagData = tagService.AllHot();      return   PartialView( "TagCloud" , tagData); }TagCloudは簡単なPartialViewファイルです.

両者の同一点


RenderPartialおよびRenderActionは、通常、メニューやナビゲーションバーなどの機能が相対的に独立した「ブロック」を表示するために使用されます.両方の出力結果が呼び出しのViewの一部として表示されます.

両者の相違点


RenderPatialのデータは呼び出したViewから来ており、RenderActionは自分から来ている.RenderActionは新しいRequestを開始しますが、RenderPatialは開始しません.

選択方法


2つの異なる点のうちの2番目の点によっては、RenderActionが新しいActionメソッドを呼び出すので、Asp.NetMvcではActionが最小のキャッシュ単位であるため、ある「ブロック」のデータが比較的固定されており、訪問者によって変化しない場合は、その場合はRenderActionを使用する時である.余談ですが、RenderActionに対して新しいRequestが発起され、呼び出しページの流れが少し壊れているような気がします.あるViewが表示されると、自分でRequestを起動してデータを取得して表示します.明らかにViewとしての原則を破壊しています.
A View should only know how to render, but not what to render!