2013-08-13 2 views
6

私はMVC 4でHtmlヘルパーを構築しています.HTMLヘルパーでtags/htmlを正しく構築する方法を知りたいです。よりよい解決策であるRazorまたはTag Builderを使用してHTMLヘルパーでHtmlをビルドしますか?

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

:私はこのような何かを行うことができ、別の側面から

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

:ここたとえば

TagBuilderクラスを使用して画像タグを作成し、単純なHTMLヘルパーですか?

答えて

3

どちらも有効ですが、後者のほうがはるかに遅いと思われますが、パーシャルビューを使用した場合の利点を確認しようとしています。

私の経験則では、HtmlHelpersは単純なマークアップにのみ使用する必要があります。より複雑なものは、部分的なビューと子のアクションを使用する必要があります。

+0

私はテーブルを構築する非常に複雑なヘルパーを持っているので、膨大な数のタグを使用してテーブルを構築するには、非常に遅くなるか遅くなるかを知りたいのです。 –

+0

私は、テーブルのHTMLを構築することはあなたの与えられた例よりも複雑なので、質問に入れました。テーブルを作成するには、MvcContribのグリッドヘルパー - http://mvccontrib.codeplex.com/wikipage?title=GridまたはSystem.Web.HelpersのWebGrid - http://msdn.microsoft.com/en-us/を参照してください。 -us/magazine/hh288075.aspx。私は車輪を再発明しないだろう:) –

+0

私はそれも考えたが、それは私が必要なものではない。私はDBやこのようなものからのデータを表示していません...あなたは私の質問の正解を得るのを助けてくれますか? –

0

最初のメソッドはメモリ内の文字列で動作し、実行しています。後者はリソースの点で高価で、ファイルにアクセスします。

+0

私はその違いを知っていますが、 'TagBuilder'をどのような状況でpereferするべきか、そして' Razor.Parse'をpereferするべき状況を知りたいのですが。 –

関連する問題