2013-08-13 5 views
6

Ich baue einen HTML-Helper in MVC 4 und ich möchte wissen, wie Tags/HTML in den HTML-Helfern richtig zu bauen.Erstellen von HTML in HTML Helper mit Razor oder Tag Builder?

Denn hier Beispiel ist einfachen HTML-Helfer, die Image-Tag mit TagBuilder Klasse erstellt:

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)); 
} 

Von einer anderen Seite ich etwas tun kann:

// 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" /> 

, das die Lösung ist besser?

Antwort

3

Beide sind gültig, ich würde vermuten, dass Letzteres jedoch viel langsamer ist und ich versuche zu sehen, welche Vorteile es gegenüber einer Teilansicht hätte.

Meine Faustregel ist, dass HtmlHelpers nur für einfaches Markup verwendet werden sollte; Etwas komplizierter sollte Teilansichten und untergeordnete Aktionen verwenden.

+0

Ich fragte diese Frage, weil ich sehr komplizierte Helfer habe, die eine Tabelle aufbaut. Um die Tabelle zu erstellen, verwende ich eine große Anzahl von Tags, so dass ich wissen möchte, ob es viel langsamer oder langsamer geht, weil es mir sehr helfen kann. –

+0

Ich hätte das in der Frage gestellt, wie das Erstellen des HTML für eine Tabelle komplizierter als Ihr gegebenes Beispiel ist. Zum Erstellen von Tabellen sollten Sie sich den Grid-Helper von MvcContrib - http://mvccontrib.codeplex.com/wikipage?title=Grid oder das WebGrid in System.Web.Helpers - http://msdn.microsoft.com/de ansehen -us/Magazin/hh288075.aspx. Ich würde das Rad nicht neu erfinden :) –

+0

Das dachte ich auch, aber es ist nicht das, was ich brauchte. Ich zeige keine Daten von DB oder etwas in der Art ... Kannst du mir bitte helfen, die richtige Antwort für meine Frage zu bekommen? –

0

Die erste Methode arbeitet mit Strings im Speicher und arbeitet, letztere ist in Bezug auf Ressourcen teurer und macht einen Dateizugriff.

+0

Ich kenne den Unterschied, aber ich möchte wissen, welche Situationen ich "TagBuilder" perferieren sollte und welche Situationen ich "Razor.Parse" perferieren sollte –