MVC Html.Partial或Html.Action

dev*_*747 59 asp.net-mvc asp.net-mvc-partialview

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

Tom*_*mmy 117

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

Html.Partial

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

Html.Action

  1. 使用Html.Action时,你实际上需要从服务器获取额外的数据来填充局部视图

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


Jes*_*lam 67

Html.Partial:渲染局部视图而不首先触及控制器操作.请参阅:部分视图

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>
Run Code Online (Sandbox Code Playgroud)

在这里,我们将完整的视图模型传递给视图,视图调用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>
Run Code Online (Sandbox Code Playgroud)

这里视图调用控制器动作MenuView,它创建一个新的视图模型并将其传递给partial.