Domanda

Ho creato un helper HTML

Html.BreadCrumb(IDictionary<string, string> crumbs)

Dove la prima stringa è l'etichetta e la seconda stringa è l'URL. L'helper crea l'html richiesto (un elenco non ordinato, alcune classi per il primo elemento, l'elemento corrente, l'ultimo elemento, l'elemento morto e i separatori ecc.) Tutto funziona bene, ma lo faccio creando un stringbuilder, pompando tutto l'html in esso e restituendo il contenuto del stringbuilder come stringa.

Immagino che in questo esempio non abbia molta importanza, ma cosa succede se un helper HTML sta producendo un grosso carico di HTML? Non c'è un modo per inviarlo a Response.Write invece di un stringbuilder?

O altri problemi / miglioramenti che hai?

È stato utile?

Soluzione

È certamente possibile usare Response.Write invece di restituire una stringa; vedere l'origine per System.Web.Mvc.Ajax.Form (in AjaxExtensions.cs) nell'origine MVC per un esempio.

Chiamate quindi l'helper con <% anziché <% =.

Sarà più veloce? Ne dubito, ma è facile da testare.

Altri suggerimenti

A proposito abbiamo un modello di denominazione in ASP.NET MVC per le varie tecniche di rendering.

Gli aiutanti che restituiscono una stringa di ciò che sono dovrebbero essere nominati come sono. Ad esempio, Url.Action () e Html.TextBox () restituiscono quegli elementi esatti. Pertanto, questi helper dovrebbero essere usati con & Lt;% =% & Gt; sintassi.

Gli helper che eseguono il rendering direttamente nel flusso di output devono iniziare con Render. Ad esempio, Html.RenderPartial (). Questi sono usati con & Lt;%% & Gt; sintassi.

Gli helper che usano il modello IDisposable dovrebbero essere nominati con Begin / End. Ad esempio, Html.BeginForm () e Html.EndForm (). Questi dovrebbero anche essere usati con & Lt;%% & Gt; sintassi.

Grazie, Eilon

Non credo che avrai problemi di prestazioni purché la dimensione delle pagine HTML che produci sia ragionevole. E quando inizi davvero a creare pagine di megabyte di dimensioni, dovresti chiederti, perché stai creando file HTML così enormi?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top