63

我是 asp.net MVC 的新手,所以请多多包涵。我需要构建一个在多个视图中重复的菜单。什么会更好地服务于目的Html.ActionHtml.Partial

4

2 回答 2

122

以下是我认为使用 Html.Action 或 Html.Partial 的指南

Html.Partial

  1. Html.Partial在渲染静态内容时使用,或者,
  2. 如果您要从发送到主视图的 ViewModel 传递数据

Html.Action

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

基本上,如果是静态的,请使用Html.Partial(). 如果是动态的、模型独立的数据,请使用Html.Action(). 可能有更多的场景,但这会让你很好地了解去哪里/如何去。 Html.RenderPartial()并且Html.RenderAction()对于上面类似命名的函数是可互换的。

于 2012-08-01T20:47:48.320 回答
67

Html.Partial:在不先点击控制器操作的情况下渲染部分视图。请参阅:部分视图

Html.Action调用一个控制器 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,它创建一个新的视图模型并将其传递给局部视图。

于 2012-08-01T21:26:56.567 回答