2011-07-16 4 views
0

この機能の部分的な表示ではなく、HtmlHelperを決定しました。ASP.NET MVC3:コンマで区切られたリンクのコレクションを作成するのに最も効率的なHtmlHelper

Authorオブジェクトのコレクションを受け入れ、そのブックへのリンクのコンマ区切り文字列(MvcHtmlString?)を出力する例がありますか?

+0

public static MvcHtmlString CommaSeparated(this HtmlHelper helper, IEnumerable<MvcHtmlString> list) { return new MvcHtmlString(string.Join(", ", list)); } 

使用は(:Pそれは私のものではありません)ASP.NET MVC 3とカミソリでテンプレートヘルパーについての素晴らしいブログです - > http://lostechies.com/hugobonacci/2011/07/11/templates-with-razor/ –

答えて

2

あなたはこれをお探しですか?

public static class ListHelperExtension 
{ 
    public static string ToCommaSeperatedAnchorTags(this List<Author> Authorlst) 
    { 
     var sb = new StringBuilder(); 
     foreach (var author in Authorlst) 
     { 
      foreach (string bookName in author.Books) 
      {    
       //you can also use TagBuilder  
       sb.Append("<a href='#'>"); 
       sb.Append(bookName); 
       sb.Append("</a>"); 
      }    
     }    
     return sb.ToString(); 
    } 
} 

コールあなたがビューでそれを使用するのHtmlHelperとしてそれを作りたい場合は、この

List<Author> lst = new List<Author>{ 
      new Author {Name = "J k Rowling",Books = new List<string> { "Harry Potter1", "Harry Potter2"}}, 
      new Author {Name = "John Rogers",Books = new List<string> { "Transformers1", "Transformers2"}} 
     }; 

string str = lst.ToCommaSeperatedAnchorTags(); 

を使用して、あなたが

public static class HtmlHelpers 
{ 
    public static MvcHtmlString ToCommaSeperatedAnchorTags(this HtmlHelper helper, List<Author> Authorlst) 
    { 
     var sb = new StringBuilder(); 
     foreach (var author in Authorlst) 
     { 
      foreach (string bookName in author.Books) 
      { 
       sb.Append("<a href='#'>"); 
       sb.Append(bookName); 
       sb.Append("</a>"); 
      } 
     } 

     return new MvcHtmlString(sb.ToString()); 
    } 
} 

として、ビューでそれを書くことができますそれを追加することができます

@Html.ToCommaSeperatedAnchorTags(Model.lst) 
+3

ありがとう、しかし、私はこれがコンマ区切りになる方法を見ていない。 – Withnail

+0

これで、これらの種類のString.Joinを使用できます。 String.Join( "、"、listOfBooks); –

+0

「」の後ろにカンマを簡単に追加できます。 – Buildstarted

2

古い質問ですが、同様の解決策が必要なので私はここにいました。質問を想定し

は実際にはどのようHtmlStringのカンマ区切りリスト(MvcHtmlString)を生成する(質問のタイトルのようにと著者/本と仮定すると、単に余分なディテールではなく、問題の核心である)

は表示ヘルパーを使用することができますが、それはあまり再利用できません(各プロパティに対して別々のヘルパー)。

@CommaSeparatedHtmlStringList(books.Select(book=>Html.ActionLink(book.Title, "Action"))) 

私は、その後に変換するために開始しました:

私の最初の試みは、エンコードされた出力で終わったので、このヘルパー(CSHTMLに直接追加)を思い付いた:

@helper CommaSeparatedHtmlStringList(IEnumerable<MvcHtmlString> list) 
{ 
    @Html.Raw(list.First()) 
    foreach (var item in list.Skip(1)) 
    { 
     @Html.Raw(", ") 
     @Html.Raw(item) 
    } 
} 

使用してhtmlString/MvcHtmlStringsを出力するには、@ Html.Raw部分が必要です。つまり、

@Html.Raw(string.Join(", ", books.Select(book=>html.ActionLink... 

あなたはまだヘルパーの背後にあるコードを好む場合:ここで

@Html.CommaSeparated(books.Select(book=>html.ActionLink(book.Title, "Action")))) 
関連する問題