1. ホーム
  2. asp.net-mvc

asp.net MVC パーシャルビューコントローラ アクション

2023-08-03 21:13:15

質問

私はWebアプリ開発の超初心者で、最近の技術から始めようと思い、asp.netとMVCフレームワークを一度に学ぼうとしているところです。これはおそらく、MVCの専門家であるあなたにとって非常に単純な質問です。

私の質問は、部分ビューは関連するアクションを持つべきで、もしそうなら、このアクションは、通常のページが RenderPartial() を使用するたびに、このアクションが呼び出されるのでしょうか?

どのように解決するのですか?

部分ビューを返すアクションを持つことはできますが、部分ビューをレンダリングするアクションは必要ではありません。 RenderPartialは部分ビューを受け取り、与えられたモデルとビューデータを使用して、現在の(親)ビューにレンダリングします。

ページの一部をロード/リロードするためにAJAXを使用している場合、部分的なビューを返すアクションが必要かもしれません。 その場合、ページの一部だけを再読み込みしたいので、完全なビューを返すことは望ましくありません。 この場合、アクションにページのそのセクションに対応する部分的なビューを返させることができます。

標準的なメカニズム

通常のビューの中で部分ビューを利用する(アクション不要)

...some html...
<% Html.RenderPartial( "Partial", Model.PartialModel ); %>
...more html..

Ajaxメカニズム

AJAXでページの一部を再読み込みする(最初のページロードで部分的にインラインでレンダリングされることに注意)。

...some html...
<div id="partial">
<% Html.RenderPartial( "Partial", Model.PartialModel ); %>
</div>
...more html...

<script type="text/javascript">
   $(function() {
       $('#someButton').click( function() {
           $.ajax({
              url: '/controller/action',
              data: ...some data for action...,
              dataType: 'html',
              success: function(data) {
                 $('#partial').html(data);
              },
              ...
           });
       });
   });
</script>

AJAX用コントローラ

public ActionResult Action(...)
{
     var model = ...

     ...

     if (Request.IsAjaxRequest())
     {
          return PartialView( "Partial", model.PartialModel );
     }
     else
     {
          return View( model );
     }
}