web-dev-qa-db-ja.com

MVC Html.PartialまたはHtml.Action

Asp.net MVCは初めてなので、ご容赦ください。複数のビューにわたって繰り返されるメニューを作成する必要があります。目的に役立つもの Html.Action OR Html.Partial

58
developer747

ここでは、Html.ActionまたはHtml.Partialの使用に関するガイドラインを検討します。

Html.Partial

  1. 静的コンテンツをレンダリングする場合は_Html.Partial_を使用します。または、
  2. メインビューに送信されるViewModelからデータを渡す場合

Html.Action

  1. 実際にサーバーから追加データを取得して部分ビューにデータを取り込む必要がある場合は、_Html.Action_を使用します

基本的に、静的である場合は、Html.Partial()を使用します。動的で、モデルに依存しないデータの場合は、Html.Action()を使用します。おそらくもっと多くのシナリオがありますが、これはどこに/どのように行けば良いアイデアを提供します。 Html.RenderPartial()Html.RenderAction()は、上記の同様の名前の関数と交換可能です。

115
Tommy

Html.Partial:最初にコントローラーアクションを押すことなくPartial Viewをレンダリングします。参照: 部分ビュー

Html.ActionController Actionを呼び出し、これはビュー/部分ビューを返す場合があります(またはそうでない場合は、HttpNotFoundをスローしたり、Jsonなどを返したりします)。

メニューにはビューモデルが必要ですか、それとも静的ですか?

静的メニューの場合、Html.Partialがニーズに合います。静的なメニューコンテンツを部分ビュー内に配置し、Html.Partialを呼び出してレンダリングしたい場所に呼び出します。

メニューがビューモデルから生成されている場合、eitherHtml.PartialまたはHtml.Actionを使用できます。

Html.Partialを使用したビューモデルのチェーン化:

public class MenuViewModel {
    // menu data goes here
}

public class GeneralViewModel : MenuViewModel {
    // general view info goes here
}

public ActionResult Index() {
    return View(new GeneralViewModel());
}

// View Code
@model GeneralViewModel
<div>@Html.Partial("_partialName", model)</div>

ここでは、完全なビューモデルをビューに渡し、ビューはPartialを呼び出し、そのモデルを部分ビューに渡します。

** Html.Actionを使用してモデルを分離する:**

public ActionResult Index() {
    return View(new GeneralViewModel());
}

public ActionResult MenuView() {
    return PartialView(new MenuViewModel());
}

// View Code
@model GeneralViewModel
<div>@Html.Action("MenuView")</div>

ここで、ビューはコントローラーアクションMenuViewを呼び出します。これにより、新しいビューモデルが作成され、パーシャルに渡されます。

67
Jesse Hallam