Html.Partial: Render a Partial View without hitting a controller action first. See: Partial Views
Html.Action Call a Controller Action, which may return a view/partial view (or may not, it could throw an HttpNotFound or return Json, or other things).
Does your menu require a view model, or is it static?
If it's a static menu, Html.Partial will fit your needs. Place the static menu content inside the partial view and call Html.Partial where you want it to render.
If the menu is being generated off a view model, you can use either Html.Partial or Html.Action:
Chaining the view model using 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
Here we pass a complete view model to the view and the view calls Partial and hands its model off to the partial view.
** Separating the model using Html.Action:**
public ActionResult Index() {
return View(new GeneralViewModel());
}
public ActionResult MenuView() {
return PartialView(new MenuViewModel());
}
// View Code
@model GeneralViewModel
Here the view calls the controller action MenuView which creates a new view model and passes it to the partial.