2013-08-13 4 views
6

Sto costruendo un helper Html in MVC 4 e voglio sapere come creare tag/html negli helper HTML in modo corretto.Costruire Html in Helper Html usando il builder Razor o Tag?

Per esempio qui è semplice aiutante HTML che crea tag immagine usando TagBuilder classe:

public static MvcHtmlString Image(this HtmlHelper html, string imagePath, 
    string title = null, string alt = null) 
{ 
    var img = new TagBuilder("img"); 
    img.MergeAttribute("src", imagePath); 
    if (title != null) img.MergeAttribute("title", title); 
    if (alt != null) img.MergeAttribute("alt", alt); 

    return MvcHtmlString.Create(img.ToString(TagRenderMode.SelfClosing)); 
} 

Da un altro lato che posso fare qualcosa di simile:

// C#: 
public static MvcHtmlString Image(this HtmlHelper html, string imagePath, 
    string title = null, string alt = null) 
{ 
    var model = new SomeModel() { 
     Path = imagePath, 
     Title = title, 
     Alt = alt 
    }; 

    return MvcHtmlString.Create(Razor.Parse("sometemplate.cshtml", model)); 
} 

// cshtml: 
<img src="@model.Path" title="@model.Title" alt="@model.Alt" /> 

che è la soluzione migliore?

risposta

3

Entrambi sono validi, tuttavia sospetto che quest'ultimo sia molto più lento e sto cercando di vedere quali benefici avrebbe avuto sull'utilizzo di una vista parziale.

La mia regola generale è che HtmlHelpers deve essere utilizzato solo per il markup semplice; qualsiasi cosa più complicata dovrebbe essere l'uso di viste parziali e azioni secondarie.

+0

Ho fatto questa domanda perché ho un aiutante molto complicato che costruisce un tavolo. Per costruire la tabella, utilizzo un numero enorme di tag, quindi voglio sapere se sarà molto più lento o più lento perché può aiutarmi molto. –

+0

L'avrei messo nella domanda come la costruzione dell'HTML per una tabella è più complicato del tuo esempio dato. Per la creazione di tabelle si dovrebbe dare un'occhiata a Grid helper di MvcContrib - http://mvccontrib.codeplex.com/wikipage?title=Grid o alla WebGrid in System.Web.Helpers - http://msdn.microsoft.com/en -us/magazine/hh288075.aspx. Non vorrei reinventare la ruota :) –

+0

Anch'io l'ho pensato ma non è quello di cui avevo bisogno. Non sto visualizzando dati da DB o qualcosa del genere ... Quindi, per favore, puoi aiutarmi a ottenere la risposta corretta per la mia domanda? –

0

Il primo metodo funziona su stringhe in memoria e sta eseguendo, il secondo è più costoso in termini di risorse e rende un accesso ai file.

+0

Conosco la differenza ma voglio sapere quali situazioni dovrei pereferare 'TagBuilder' e quali situazioni dovrei perefer' Razor.Parse' –