【问题标题】:MVC Html.Partial or Html.ActionMVC Html.Partial 或 Html.Action
【发布时间】:2012-07-30 18:43:53
【问题描述】:

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

【问题讨论】:

  • 没有更多信息 Html.Partial。将您的菜单内容放在局部视图中并使用@Html.Partial("partialViewName") 调用它
  • 一个Action 比仅仅返回一个视图做更多的(潜在的)。假设您想在每次构建菜单时计数(Log)(或者记录谁请求了菜单,或者他请求了什么样的菜单)。底线将是相同的 - html 中的静态菜单 div。但结果不会。

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


【解决方案1】:

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

Html.Partial

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

Html.Action

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

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

【讨论】:

  • 很好的解释 +1 给你。
  • 请注意,如果应用程序在控制器中有多个循环,则可能会稍微难以推理给定操作会发生什么,因为 Html.Action() 返回到一个可能不同的控制器。根据您的实现/依赖关系,这也可能很昂贵,filters 在某些情况下可以作为替代方案。
  • +1 因为一个简单的原因(对我而言),动作是动态的想法:通过控制器呈现的内容意味着它可以独立于包含的视图呈现。这意味着视图可以呈现,然后如果您希望页面刷新它,您可以对相同(部分)控制器操作进行 ajax 调用,并使用结果来刷新容器。
【解决方案2】:

Html.Partial: 渲染一个局部视图,而不先点击控制器动作。见:Partial Views

Html.Action 调用 Controller 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-01-19
    • 2011-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-23
    • 1970-01-01
    相关资源
    最近更新 更多