Ci sono due volte quando vuoi rendere una vista parziale:
-
Sincronicamente, come parte del rendering di una vista più grande
es. la vista che viene chiamata quando si esegue il rendering / Widget / Dettagli / potrebbe avere il codice Rasoio simile a questo
<div class="subwidget">
@Html.Partial("_Subwidget", Model.Subwidget)
</div>
Questo renderà quindi il _Subwidget.cshtml e passerà la proprietà Subwidget del Widget della vista corrente. Questo aiuta a scomporre le viste più grandi per renderle più gestibili e ti permette di rendere la vista _Subwidget in altre viste senza duplicare il codice.
-
In modo asincrono, quando la vista parziale è l'intero contenuto che si desidera restituire chiamando un metodo controller.
es. la pagina è già sul dispositivo client ma contiene questo codice jQuery
$.get('/Widgets/Subwidget/300')
Che invia un GET al controller Widget e chiama Subwidget (300). L'azione di Subwiget non vuole includere alcun layout e altre cose, vuole solo restituire dati nudi (che potrebbero essere un frammento HTML, JSON o anche solo una stringa).
L'azione di Subwiget potrebbe essere simile a questa
public ActionResult Subwidget(int Id)
{
var subwidget = _widgetGateway.Subwidget(Id);
return PartialView("_Subwidget", subwidget);
}
Dipende dal codice javascript sulla pagina per affrontarlo a quel punto.
È importante tenere presente che una vista parziale è solo il risultato che viene inviato al browser. Le tue azioni sono ancora in grado di eseguire tutte le azioni che un'azione di controller standard potrebbe eseguire. Se vuoi accettare i dati sotto forma di POST, PUT o DELETE puoi anche lavorare nella tua azione:
[HttpPost]
public ActionResult SubmitSubwidget(Subwiget sub)
{
_widgetGateway.Save(sub);
return PartialView("_Subwidget", sub);
}
In realtà, non devi nemmeno restituire alcun contenuto al browser. Se vuoi solo sapere se la chiamata è riuscita, puoi semplicemente inviare il codice di stato HTTP.
[HttpPost]
public ActionResult SubmitSubwidget(Subwiget sub)
{
if(_widgetGateway.Save(sub))
return new HttpStatusCodeResult(200, "Submitted");
else
return new HttpStatusCodeResult(500, "Submission failed");
}