質問

私はWebアプリの開発を初めて使用していて、最近のテクノロジーから始めようと思っていたので、MVCフレームワークとしてASP.NET AS-Wellを一度に学習しようとしています。これはおそらくあなたにとって非常に簡単な質問です、MVCの専門家です。

私の質問は、部分的なビューに関連するアクションがある場合、もしそうなら、通常のページが使用するたびにこのアクションが呼び出されますか RenderPartial() 部分的な見解で?

役に立ちましたか?

解決

部分的なビューを返すアクションを持つことはできますが、部分的なビューをレンダリングするためのアクションは必要ありません。 RenderPartialは部分的なビューを取得し、指定されたモデルを使用して、提供されている場合はデータを現在(親)ビューに表示します。

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

標準メカニズム

通常のビュー内で部分的なビューを使用する(アクションは不要)

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

ajaxメカニズム

Ajaxを介してページのリロード部分(注Partialは、初期ページのロードでインラインにレンダリングされます)

...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 );
     }
}

他のヒント

受け入れられた答えは完全に正しいですが、jQueryロードを使用して部分的なビューをロードできると付け加えたいと思います。並行性を検討したくない場合は、必要な構成が少なくなります。

$("#Your-Container").load("/controller/action/id");

答えはノーだ。ただし、部分的なビューの背後にあるコントローラーアクションが必要な場合があります。次に、部分的なビューを返すようにactionmethodを作成できます。このActionMethodは、別のビュー内で呼び出すことができます。

@Html.Action("StockWarningsPartial", "Stores")

ActionMethodは次のように見えます。

public ActionResult StockWarningsPartial()
{
      ....              
      return View("StockWarningsPartial", warnings);

}

そして、「stockwarningspartial.cshtml」のビューは以下で始まります。

@{
    Layout = null;
}

周囲のレイアウトを再びレンダリングしないようにするために。

このロジックで同様のことを達成することができました。

.cshtml内

@Html.Action("ActionMethodName", "ControllerName");

コントローラー内

[Route("some-action")]
public ActionResult ActionMethodName()
{
    var someModel = new SomeModel();
    ...
    return PartialView("SomeView.cshtml", someModel);
}

以上です。

.cshtmlからアクションメソッドに値を渡す必要がある場合、それは可能です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top