2012-11-18 20 views
9

Ho un controller, azione che restituisce PartialViewResult e visualizza con esso. Per il test, visualizzo l'ora corrente DateTime (in azione) e, a vista, controllo se è nullo o no, quindi so cosa ho ottenuto.Qual è la differenza tra i metodi Html.Partial e Html.Action?

Quando provo a "incorporare" quella vista in un altro con Html.Action ottengo l'ora corrente, quindi viene chiamata la mia azione.

Ma quando uso Html.Partial la vista è resa con null, il mio metodo di azione non viene chiamato. Inoltre, confermano anche due breakpoints e debugger, in quest'ultimo caso il metodo my action non viene chiamato.

metodo di azione:

public PartialViewResult Test() 
{ 
    return PartialView(DateTime.Now); 
} 

(parziale) Vista:

@model DateTime? 

<p>@(Model ?? DateTime.MinValue)</p> 

e chiamare da vista principale è o @Html.Action("Test") o @Html.Partial("Test").

+0

Puoi mostrarci la "vista principale" – gdoron

risposta

23

Html.Action() chiamerà il metodo di azione, ma Html.Partial() non lo farà. Html.Partial() mostra solo la tua vista parziale ed è utile se hai del contenuto statico o se hai già caricato i dati della vista.

Html.Partial("PartialName", Model.PartialData); 

Renderà la vista PartialName con i dati del modello passati ad essa. È un ottimo modo per suddividere le viste in sezioni pulite, senza dover richiedere ulteriori richieste al server.

Html.Action("Test") 

chiamerà l'azione Test e renderà il risultato.

Questo è il motivo per cui viene visualizzato il valore NULL DateTime. Html.Action() sta effettivamente chiamando l'azione, calcolando il DateTime e visualizzando la vista, mentre Html.Partial() sta solo visualizzando la vista.

+0

Grazie per la risposta molto informativa! – greenoldman

+1

Impossibile chiamare '@ Html.Partial (" Test ", nuovo {DateTime.Now}'? –

+0

Sì, puoi farlo anche tu. Puoi anche lasciare il nuovo {}, dal momento che DateTime è valido anche come Modello. Penso che la domanda riguardasse la differenza tra Html.Action e Html.Partial, e l'OP ha menzionato solo il DateTime.Now come test. – mfanto

Problemi correlati