web-dev-qa-db-fra.com

MVC Html.Partial ou Html.Action

Je suis nouveau sur asp.net MVC, alors soyez indulgent avec moi. J'ai besoin de créer un menu qui se répète sur plusieurs vues. Qu'est-ce qui servirait mieux le but Html.Action OR Html.Partial .

58
developer747

Voici ce que je considère comme mes directives sur l'utilisation de Html.Action ou Html.Partial

Html.Partial

  1. Utilisez Html.Partial Lorsque vous rendez du contenu statique ou,
  2. Si vous allez transmettre des données du ViewModel qui sont envoyées à la vue principale

Html.Action

  1. Utilisez Html.Action Lorsque vous avez réellement besoin de récupérer des données supplémentaires sur le serveur pour remplir la vue partielle

Fondamentalement, s'il est statique, utilisez Html.Partial(). S'il s'agit de données dynamiques et indépendantes du modèle, utilisez Html.Action(). Il y a probablement plus de scénarios, mais cela vous donnera une bonne idée où/comment aller. Html.RenderPartial() et Html.RenderAction() sont interchangeables pour les fonctions nommées ci-dessus.

115
Tommy

Html.Partial: Rendu a Vue partielle sans frapper d'abord une action du contrôleur . Voir: Vues partielles

Html.Action Appelez une Action du contrôleur , qui peut renvoyer une vue/vue partielle (ou non, il pourrait lancer un HttpNotFound ou retourner Json, ou d'autres choses).

Votre menu nécessite-t-il un modèle de vue ou est-il statique?

S'il s'agit d'un menu statique, Html.Partial répondra à vos besoins. Placez le contenu du menu statique dans la vue partielle et appelez Html.Partial où vous voulez qu'il s'affiche.

Si le menu est généré à partir d'un modèle de vue, vous pouvez utiliser soitHtml.Partial ou Html.Action:

Chaînage du modèle de vue à l'aide de 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>

Ici, nous passons un modèle de vue complet à la vue et la vue appelle Partielle et transmet son modèle à la vue partielle.

** Séparation du modèle en utilisant 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>

Ici, la vue appelle l'action du contrôleur MenuView qui crée un nouveau modèle de vue et le transmet au partiel.

67
Jesse Hallam