ASP.NET MVC Azione controller di visualizzazione parziale
-
21-09-2019 - |
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?
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.