web-dev-qa-db-fra.com

Action du contrôleur de vue partielle MVC asp.net

Je suis très novice dans le développement d'applications Web et je pensais commencer par la technologie récente. J'essaie donc d'apprendre à la fois asp.net et le framework MVC. C'est probablement une question très simple pour vous, professionnels de MVC.

Ma question est la suivante: une vue partielle doit-elle avoir une action associée et, dans l'affirmative, cette action est-elle invoquée chaque fois qu'une page normale utilise RenderPartial() sur la vue partielle?

76
yogibear

Bien que vous puissiez avoir une action qui retourne une vue partielle, vous n'avez pas besoin d'une action pour afficher une vue partielle. RenderPartial prend la vue partielle et la restitue, à l'aide du modèle donné et des données de vue si elles sont fournies, dans la vue actuelle (parent).

Vous voudrez peut-être une action qui renvoie une vue partielle si vous utilisez AJAX pour charger/recharger une partie de la page. Dans ce cas, il n'est pas souhaitable de retourner la vue complète car vous ne voulez que recharger Dans ce cas, l'action peut simplement renvoyer la vue partielle qui correspond à cette section de la page.

mécanisme standard

Utilisation de la vue partielle dans une vue normale (aucune action requise)

...some html...
<% Html.RenderPartial( "Partial", Model.PartialModel ); %>
...more html..

mécanisme Ajax

Rechargement d'une partie d'une page via AJAX (la note partielle est rendue en ligne lors du chargement initial de la page))

...some html...
<div id="partial">
<% Html.RenderPartial( "Partial", Model.PartialModel ); %>
</div>
...more html...

<script type="text/javascript">
   $(function() {
       $('#someButton').click( function() {
           $.ajax({
              url: '/controller/action',
              data: ...some data for action...,
              dataType: 'html',
              success: function(data) {
                 $('#partial').html(data);
              },
              ...
           });
       });
   });
</script>

Contrôleur pour AJAX

public ActionResult Action(...)
{
     var model = ...

     ...

     if (Request.IsAjaxRequest())
     {
          return PartialView( "Partial", model.PartialModel );
     }
     else
     {
          return View( model );
     }
}
134
tvanfosson

La réponse acceptée est tout à fait correcte, mais je tiens à ajouter que vous pouvez charger votre vue partielle à l'aide de la charge jQuery. Moins de configuration nécessaire, si vous ne voulez pas considérer la simultanéité.

$("#Your-Container").load("/controller/action/id");
3
Saeid

La réponse est non. Mais parfois, vous avez besoin d'une action du contrôleur derrière une vue partielle. Ensuite, vous pouvez créer un actionMethod qui renvoie une vue partielle. Cette actionMethod peut être appelée dans une autre vue:

@Html.Action("StockWarningsPartial", "Stores")

La méthode d'action peut ressembler à:

public ActionResult StockWarningsPartial()
{
      ....              
      return View("StockWarningsPartial", warnings);

}

et la vue 'StockWarningsPartial.cshtml' commence par:

@{
    Layout = null;
}

pour ne pas rendre à nouveau la disposition environnante.

2
Peter

J'ai été capable de réaliser quelque chose de similaire avec cette logique.

Au sein du .cshtml

@Html.Action("ActionMethodName", "ControllerName");

Dans le contrôleur

[Route("some-action")]
public ActionResult ActionMethodName()
{
    var someModel = new SomeModel();
    ...
    return PartialView("SomeView.cshtml", someModel);
}

Et c'est tout.

Si vous devez transmettre des valeurs du fichier .cshtml à la méthode d'action, vous pouvez le faire.

1
Bern