Html.Partial vs Html.RenderPartial e Html.Action vs Html.RenderAction

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:

  1. Il tipo di RenderPartial di RenderPartial è void , dove come Partial restituisce MvcHtmlString

  2. Sintassi per invocare i metodi Partial() e RenderPartial() nelle viste Razor

    @ Html.Partial ( “PartialViewName”)
    @ {Html.RenderPartial (“PartialViewName”); }

  3. 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(); }