Domanda

Sono molto nuovo nello sviluppo di app Web e ho pensato di iniziare con la tecnologia recente e quindi sto cercando di imparare ASP.NET AS WELL come framework MVC contemporaneamente. Questa è probabilmente una domanda molto semplice per te, professionisti MVC.

La mia domanda è che una visione parziale avesse un'azione associata e, in tal caso, questa azione viene invocata ogni volta che una pagina normale utilizza RenderPartial() Sulla vista parziale?

È stato utile?

Soluzione

Mentre puoi avere un'azione che restituisce una visione parziale, non è necessario un'azione per rendere una visione parziale. RenderPartial prende la vista parziale e la rende, utilizzando i dati del modello e della visualizzazione se forniti, nella vista corrente (genitore).

Potresti desiderare un'azione che restituisca una vista parziale se si utilizza AJAX per caricare/ricaricare parte di una pagina. In tal caso, non è desiderato restituire la vista completa poiché si desidera ricaricare solo parte della pagina. In questo caso puoi avere l'azione restituire la vista parziale che corrisponde a quella sezione della pagina.

Meccanismo standard

Utilizzando la vista parziale all'interno di una vista normale (nessuna azione necessaria)

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

Meccanismo Ajax

Ricarica parte di una pagina tramite Ajax (nota parziale viene resa in linea nel caricamento della pagina iniziale)

...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>

Controller per Ajax

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

     ...

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

Altri suggerimenti

La risposta accettata è completamente corretta, ma voglio aggiungere che puoi caricare la tua vista parziale usando il carico jQuery. Meno configurazione necessaria, se non si desidera considerare la concorrenza.

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

La risposta è no. Ma a volte hai bisogno di un'azione controller dietro una visione parziale. Quindi è possibile creare un method di azione che restituisce una visione parziale. Questo method di azione può essere chiamato all'interno di un'altra vista:

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

L'ActionMethod può apparire:

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

}

e la vista 'stockwarningspartial.cshtml' inizia con:

@{
    Layout = null;
}

Per farlo non rendere di nuovo il layout circostante.

Sono stato in grado di ottenere qualcosa di simile con questa logica.

All'interno del .cshtml

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

All'interno del controller

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

E questo è tutto.

Se è necessario passare i valori dal .cshtml al metodo di azione, ciò è possibile.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top