Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MVC Html.Partial or Html.Action

I am new to asp.net MVC so please bear with me. I need build a menu that repeats across multiple views. What would better serve the purpose Html.Action OR Html.Partial.

like image 935
developer747 Avatar asked Aug 01 '12 19:08

developer747


People also ask

What is difference between HTML partial and HTML action?

Action() is actually calling the action, computing the DateTime, and rendering the view, whereas Html. Partial() is only rendering the view.

What is difference between HTML partial and HTML RenderPartial in MVC?

The primary difference between the two methods is that Partial generates the HTML from the View and returns it to the View to be incorporated into the page. RenderPartial, on the other hand, doesn't return anything and, instead, adds its HTML directly to the Response object's output.

Why we use HTML partial in MVC?

@Html.Partial This method renders the view as an HTML-encoded string. We can store the method result in a string variable. The Html. RenderPartial method writes output directly to the HTTP response stream so it is slightly faster than the Html.

What is the difference between HTML partial vs HTML RenderPartial & HTML action vs HTML render action?

Render vs Action partialRenderPartial will render the view on the same controller. But RenderAction will execute the action method , then builds a model and returns a view result.


2 Answers

Here are what I consider my guidelines on using Html.Action or Html.Partial

Html.Partial

  1. Use Html.Partial when you are rendering static content or,
  2. If you are going to pass data from the ViewModel that is being sent to the main view

Html.Action

  1. Use Html.Action when you actually need to retrieve additional data from the server to populate the partial view

Basically, if is static, use Html.Partial(). If dynamic, model independent data, use Html.Action(). There are probably more scenarios, but this will give you a good idea of where/how to go. Html.RenderPartial() and Html.RenderAction() are interchangeable for the similarly named functions above.

like image 142
Tommy Avatar answered Sep 24 '22 10:09

Tommy


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 <div>@Html.Partial("_partialName", model)</div> 

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 <div>@Html.Action("MenuView")</div> 

Here the view calls the controller action MenuView which creates a new view model and passes it to the partial.

like image 24
Jesse Hallam Avatar answered Sep 21 '22 10:09

Jesse Hallam