MVC Html.Partial或Html.Action

时间:2012-08-01 19:52:39

标签: asp.net-mvc asp.net-mvc-partialview

我是asp.net MVC的新手,所以请耐心等待。我需要构建一个在多个视图中重复的菜单。什么能更好地实现目标Html.ActionHtml.Partial

2 个答案:

答案 0 :(得分:114)

以下是我考虑使用Html.Action或Html.Partial

的指南

<强> Html.Partial

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

    1. 当您确实需要从服务器检索其他数据以填充局部视图时使用Html.Action
    2. 基本上,如果是静态的,请使用Html.Partial()。如果是动态的,模型独立数据,请使用Html.Action()。可能有更多场景,但这会让你很好地了解去哪里/怎么去。对于上述类似命名的函数,Html.RenderPartial()Html.RenderAction()可以互换。

答案 1 :(得分:67)

Html.Partial:呈现部分视图,而不首先点击控制器操作。请参阅:Partial Views

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

您的菜单是需要视图模型还是静态?

如果是静态菜单,Html.Partial将满足您的需求。将静态菜单内容放在局部视图中,并将Html.Partial调用到您想要渲染的位置。

如果从视图模型生成菜单,您可以使用 <{em> 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 ,它会创建一个新的视图模型并将其传递给部分模型。