我是asp.net MVC的新手,所以请耐心等待。我需要构建一个在多个视图中重复的菜单。什么能更好地实现目标Html.Action
或Html.Partial
。
答案 0 :(得分:114)
以下是我考虑使用Html.Action或Html.Partial
的指南<强> Html.Partial 强>
Html.Partial
,或<强> Html.Action 强>
Html.Action
基本上,如果是静态的,请使用Html.Partial()
。如果是动态的,模型独立数据,请使用Html.Action()
。可能有更多场景,但这会让你很好地了解去哪里/怎么去。对于上述类似命名的函数,Html.RenderPartial()
和Html.RenderAction()
可以互换。
答案 1 :(得分:67)
Html.Partial:呈现部分视图,而不首先点击控制器操作。请参阅:Partial Views
Html.Action 调用控制器操作,可能会返回视图/部分视图(或者可能不会,它可能会抛出HttpNotFound或者返回Json或其他东西)。
您的菜单是需要视图模型还是静态?
如果是静态菜单,Html.Partial
将满足您的需求。将静态菜单内容放在局部视图中,并将Html.Partial
调用到您想要渲染的位置。
如果从视图模型生成菜单,您可以使用 <{em> Html.Partial
或Html.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 ,它会创建一个新的视图模型并将其传递给部分模型。