In ASP.NET MVC, qual è la differenza tra:
Html.Partial
e Html.RenderPartial
Html.Action
e Html.RenderAction
Html.Partial
restituisce una stringa. Html.RenderPartial
chiama Write
internally e restituisce void
.
L’utilizzo di base è:
// Razor syntax @Html.Partial("ViewName") @{ Html.RenderPartial("ViewName"); } // WebView syntax <%: Html.Partial("ViewName") %> <% Html.RenderPartial("ViewName"); %>
Nello snippet precedente, entrambe le chiamate produrranno lo stesso risultato.
Mentre è ansible memorizzare l’output di Html.Partial
in una variabile o restituirlo da un metodo, non è ansible farlo con Html.RenderPartial
. Il risultato verrà scritto nel stream di Response
durante l’esecuzione / valutazione.
Questo vale anche per Html.Action
e Html.RenderAction
.
Pensa a @ Html.Partial come codice HTML copiato nella pagina padre. Pensa a @ Html.RenderPartial come controllo utente .ascx incorporato nella pagina padre. Un controllo utente .ascx ha molti più overhead.
‘@ Html.Partial’ restituisce una stringa codificata in html che viene costruita in linea con il genitore. Accede al modello del genitore.
‘@ Html.RenderPartial’ restituisce l’equivalente di un controllo utente .ascx. Visualizza la propria copia del ViewDataDictionary della pagina e le modifiche apportate al ViewData di RenderPartial non hanno effetto sul ViewData del genitore.
Usando il riflesso troviamo:
public static MvcHtmlString Partial(this HtmlHelper htmlHelper, string partialViewName, object model, ViewDataDictionary viewData) { MvcHtmlString mvcHtmlString; using (StringWriter stringWriter = new StringWriter(CultureInfo.CurrentCulture)) { htmlHelper.RenderPartialInternal(partialViewName, viewData, model, stringWriter, ViewEngines.Engines); mvcHtmlString = MvcHtmlString.Create(stringWriter.ToString()); } return mvcHtmlString; } public static void RenderPartial(this HtmlHelper htmlHelper, string partialViewName) { htmlHelper.RenderPartialInternal(partialViewName, htmlHelper.ViewData, null, htmlHelper.ViewContext.Writer, ViewEngines.Engines); }
La differenza è la prima restituisce una MvcHtmlString
ma la seconda ( Render..
) restituisce direttamente la risposta.
Ecco cosa ho trovato:
Usa RenderAction quando non hai un modello da inviare alla vista e hai un sacco di html da riportare che non ha bisogno di essere salvato in una variabile.
Utilizzare Action quando non si dispone di un modello da inviare alla vista e disporre di un po ‘di testo da riportare che deve essere memorizzato in una variabile.
Usa RenderPartial quando hai un modello da inviare alla vista e ci sarà un sacco di html che non ha bisogno di essere memorizzato in una variabile.
Usa Parziale quando hai un modello da inviare alla vista e ci sarà un po ‘di testo che deve essere memorizzato in una variabile.
RenderAction e RenderPartial sono più veloci.
Secondo me @Html.RenderPartial()
ha un’esecuzione più veloce di @Html.Partial()
causa di Html.RenderPartial fornisce una risposta rapida all’output.
Perché quando uso @Html.Partial()
, il mio sito web richiede più tempo per essere caricato rispetto a @Html.RenderPartial()
@Html.Partial
e @Html.RenderPartial
vengono utilizzati quando il modello di visualizzazione parziale è la corrispondenza del modello principale, non è necessario creare alcun metodo di azione per richiamarlo.
@Html.Action
e @Html.RenderAction
vengono utilizzati quando il modello di visualizzazione parziale è indipendente dal modello principale, in pratica viene utilizzato quando si desidera visualizzare qualsiasi contenuto del tipo di widget sulla pagina. È necessario creare un metodo di azione che restituisca un risultato di vista parziale mentre si chiama il metodo dalla vista.
Ulteriori informazioni sulla domanda:
“Quando Html.RenderPartial () viene chiamato con solo il nome della vista parziale, ASP.NET MVC passerà alla vista parziale gli stessi oggetti del dizionario Model e ViewData utilizzati dal modello di visualizzazione chiamante.”
“NerdDinner” da Professional ASP.NET MVC 1.0
Il tipo restituito di Html.RenderAction
è void
che significa che Html.RenderAction
il rendering diretto delle risposte in Visualizza dove il tipo restituito di Html.Action
è MvcHtmlString
È ansible catturare la sua vista di rendering nel controller e modificarlo utilizzando il seguente metodo
protected string RenderPartialViewToString(string viewName, object model) { if (string.IsNullOrEmpty(viewName)) viewName = ControllerContext.RouteData.GetRequiredString("action"); ViewData.Model = model; using (StringWriter sw = new StringWriter()) { ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName); ViewContext viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw); viewResult.View.Render(viewContext, sw); return sw.GetStringBuilder().ToString(); } }
Ciò restituirà la stringa Html della vista.
Questo vale anche per Html.Partial
e Html.RenderPartial
Parziale o RenderPartial: non è necessario creare un metodo di azione. utilizzare quando i dati da visualizzare nella vista parziale sono già presenti nel modello della pagina corrente.
Azione o RenderAzione: richiede un metodo di azione figlio. utilizzare quando i dati da visualizzare sulla vista hanno un modello indipendente.
differenze:
Il tipo di RenderPartial
di RenderPartial
è void
, dove come Partial
restituisce MvcHtmlString
Sintassi per invocare i metodi Partial()
e RenderPartial()
nelle viste Razor
@ Html.Partial ( “PartialViewName”)
@ {Html.RenderPartial (“PartialViewName”); }
Sintassi per il RenderPartial()
metodi Partial()
e RenderPartial()
nelle viste Webform
[%: Html.Partial (“PartialViewName”)%]
[% Html.RenderPartial (“PartialViewName”); %]
Di seguito sono riportate le 2 domande comuni dell’intervista relative a Partial()
e RenderPartial()
Quando si utilizzerà Partial()
su RenderPartial()
e viceversa?
La differenza principale è che RenderPartial()
restituisce void e l’output verrà scritto direttamente nel stream di output, dove il metodo Partial()
restituisce MvcHtmlString
, che può essere assegnato a una variabile e manipolarlo se necessario. Quindi, quando è necessario assegnare l’output a una variabile per manipolarlo, quindi usare Partial (), altrimenti usare RenderPartial ().
Quale è meglio per le prestazioni?
Dal punto di vista delle prestazioni, il rendering direttamente sul stream di output è migliore. RenderPartial()
fa esattamente la stessa cosa ed è migliore per le prestazioni rispetto a Partial()
.
Html.Partial
: restituisce MvcHtmlString
e rallenta
Html.RenderPartial
: direttamente render / write sul stream di output e restituisce void
ed è molto veloce rispetto a Html.Partial
Per “parziale” lo uso sempre come segue:
Se c’è qualcosa che devi includere in una pagina che devi passare attraverso il controller (come faresti con una chiamata Ajax), usa “Html.RenderPartial”.
Se hai un ‘statico’ includi che non è collegato ad un controller di per sé e solo nella cartella ‘condivisa’, ad esempio, usa “HTML.partial”
@Html.Partial
restituisce la vista nella stringa con codifica HTML e utilizza la stessa vista dell’object TextWriter
. @Html.RenderPartial
questo metodo restituisce void
. @Html.RenderPartial
è più veloce di @Html.Partial
La syntax per PartialView
:
[HttpGet] public ActionResult AnyActionMethod { return PartialView(); }