我刚开始学习asp.net MVC,请多多包涵。我需要构建一个跨多个视图重复的菜单,哪个更适合这个目的:Html.Action
还是Html.Partial
?
以下是我认为在使用Html.Action或Html.Partial时应遵循的指南:
Html.Partial
Html.Partial
Html.Partial
Html.Action
Html.Action
基本上,如果内容是静态的,使用 Html.Partial()
。如果是动态的、与模型无关的数据,请使用 Html.Action()
。可能会有更多的情况,但这将给您一个关于如何处理的好想法。对于以上类似命名的函数,Html.RenderPartial()
和Html.RenderAction()
是可互换的。
Html.Partial:在不先触发控制器操作的情况下呈现一个局部视图。参见:局部视图
Html.Action:调用一个控制器操作,它可能返回一个视图/局部视图(也可能不会,它可能会抛出HttpNotFound或返回Json等其他内容)。
你的菜单需要视图模型吗,还是静态的?
如果是静态菜单,Html.Partial
将适合你的需求。将静态菜单内容放入部分视图中,并在想要呈现它的位置调用Html.Partial
。
如果菜单是根据视图模型生成的,则可以使用其中任何一个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,该操作创建一个新的视图模型并将其传递给局部视图。
@Html.Partial("partialViewName")
调用它。 - MisterIsaak