MVC Html.Partial或Html.Action
我是新来的asp.net MVC所以请忍受我。 我需要build立一个重复多个视图的菜单。 什么会更好地服务Html.Action
或Html.Partial
的目的。
以下是我认为我使用Html.Action或Html.Partial的指导原则
Html.Partial
- 当您呈现静态内容时使用
Html.Partial
, - 如果您要传递正在发送到主视图的ViewModel的数据
Html.Action
- 当您实际需要从服务器检索其他数据以填充部分视图时,请使用
Html.Action
基本上,如果是静态的,使用Html.Partial()
。 如果是dynamic的,模型独立的数据,使用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创build一个新的视图模型,并将其传递给部分。