MVC Html.Partial或Html.Action

我是新来的asp.net MVC所以请忍受我。 我需要build立一个重复多个视图的菜单。 什么会更好地服务Html.ActionHtml.Partial的目的。

以下是我认为我使用Html.Action或Html.Partial的指导原则

Html.Partial

  1. 当您呈现静态内容时使用Html.Partial
  2. 如果您要传递正在发送到主视图的ViewModel的数据

Html.Action

  1. 当您实际需要从服务器检索其他数据以填充部分视图时,请使用Html.Action

基本上,如果是静态的,使用Html.Partial() 。 如果是dynamic的,模型独立的数据,使用Html.Action() 。 有可能更多的情况下,但这会给你一个好主意去哪里/如何去。 对于上面类似命名的函数, Html.RenderPartial()Html.RenderAction()是可以互换的。

Html.Partial:首先渲染一个局部视图而不触碰控制器动作。 请参阅: 部分视图

Html.Action调用一个控制器动作 ,它可以返回一个视图/部分视图 (或不可能,它可以抛出一个HttpNotFound或返回Json,或其他东西)。

你的菜单是否需要视图模型,还是静态的?

如果它是一个静态菜单, Html.Partial将适合您的需求。 将静态菜单内容放置在部分视图中,并将Html.Partial调用到您想要呈现的位置。

如果菜单是从视图模型生成的,则可以使用Html.PartialHtml.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创build一个新的视图模型,并将其传递给部分。