2013-08-13 13 views
6

Buduję pomocnika HTML w MVC 4 i chcę wiedzieć, jak poprawnie budować znaczniki/html w pomocnikach html.Budowanie Html w Html Helper za pomocą Razor lub budowniczy Tag?

Na przykład tutaj jest prosty HTML pomocnika, który tworzy tag obrazu za pomocą TagBuilder Klasa:

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

Z innej strony można zrobić coś takiego:

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

Który jest lepszym rozwiązaniem?

Odpowiedz

3

Oba są ważne, to podejrzewam, że te ostatnie są jednak znacznie wolniej i staram się zobaczyć, jakie korzyści będzie mieć nad zastosowaniem częściowy widok.

Moja zasada jest taka, że ​​HtmlHelpers powinien być używany tylko do prostego oznaczania; cokolwiek bardziej skomplikowanego powinno się stosować Częściowe widoki i Akcje dziecka.

+0

Zadałem to pytanie, ponieważ mam bardzo skomplikowanego pomocnika, który buduje stół. Aby zbudować stół, używam ogromnej ilości tagów, więc chcę wiedzieć, czy będzie wolniejszy czy wolniejszy, ponieważ może mi bardzo pomóc. –

+0

Wstawiłbym to w pytaniu, ponieważ tworzenie kodu HTML dla tabeli jest bardziej skomplikowane niż podany przykład. Aby zbudować stoły, powinieneś rzucić okiem na pomocnika Grid MvcContrib - http://mvccontrib.codeplex.com/wikipage?title=Grid lub na WebGrid w System.Web.Helpers - http://msdn.microsoft.com/pl -us/magazine/hh288075.aspx. Nie chciałbym odkrywać koła na nowo :) –

+0

Też tak pomyślałem, ale to nie jest to, czego potrzebowałem. Nie wyświetlam danych z DB lub czegoś podobnego ... Czy możesz mi pomóc uzyskać poprawną odpowiedź na moje pytanie? –

0

Pierwsza metoda działa na ciągi znaków w pamięci i wykonuje, ten ostatni jest bardziej kosztowne pod względem zasobów i sprawia, że ​​dostęp do pliku.

+0

Znam różnicę, ale chcę wiedzieć, jakie sytuacje powinienem pereferować 'TagBuilder' i jakie sytuacje powinienem pereferować' Razor.Parse' –