Question

Je suis très nouveau dans le développement d'applications Web et j'ai pensé commencer par la technologie récente et j'essaie donc d'apprendre ASP.NET As-Well que le cadre MVC à la fois. C'est probablement une question très simple pour vous, les professionnels du MVC.

Ma question est si une vue partielle a une action associée, et si oui, cette action est-elle invoquée chaque fois qu'une page normale utilise-t-elle RenderPartial() sur la vue partielle?

Était-ce utile?

La solution

Bien que vous puissiez avoir une action qui renvoie une vue partielle, vous n'avez pas besoin d'une action pour rendre une vue partielle. RenderPartial prend la vue partielle et la rend, en utilisant le modèle donné et les 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 d'une page. Dans ce cas, le retour de la vue complète n'est pas souhaité car vous voulez seulement recharger une partie de la page. Dans ce cas, vous pouvez faire en sorte que l'action renvoie simplement la vue partielle qui correspond à cette section de la page.

Mécanisme standard

En utilisant une vue partielle dans une vue normale (aucune action nécessaire)

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

Mécanisme ajax

Recharger la partie d'une page via AJAX (Remarque partielle est rendue en ligne dans la charge de page initiale)

...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 );
     }
}

Autres conseils

La réponse acceptée est complètement correcte, mais je veux ajouter que vous pouvez charger votre vue partielle à l'aide de JQuery Load. Moins de configuration nécessaire, si vous ne voulez pas considérer la concurrence.

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

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

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

L'ActionMethod peut ressembler:

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

}

Et la vue «StockwarningsPartial.cshtml» commence par:

@{
    Layout = null;
}

Pour le faire ne plus rendre votre disposition environnante.

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

Dans le .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 .cshtml à la méthode d'action, c'est possible.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top