ASP.NET MVC3: наиболее эффективный HtmlHelper для создания коллекции ссылок через запятую - PullRequest
0 голосов
/ 16 июля 2011

Я выбрал HtmlHelper, а не частичное представление для этой функции.

У кого-нибудь есть пример, который может принять, скажем, коллекцию объектов Author и вывести строку, разделенную запятой (MvcHtmlString?) ссылки на свои книги?

Ответы [ 2 ]

2 голосов
/ 09 сентября 2013

Старый вопрос, но я был здесь, поскольку мне нужно было подобное решение.

Предположим, что вопрос на самом деле: как создать разделенный запятыми список HtmlString (MvcHtmlString) (как в заголовке вопроса и предположить, что автор / книги - просто дополнительная деталь, а не суть вопроса)

Вы могли бы использовать помощник по отображению, но это было бы не очень многократно (отдельный помощник для каждого свойства).

Моя первая попытка закончилась с закодированным выводом, поэтому придумала этот помощник (добавьте его непосредственно в cshtml):

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

используйте с:

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

Затем я начал конвертировать в html-помощник, чтобы вы могли @Html.CommaSeparate(books.Selected...), а затем понял, что вам просто нужна часть @ Html.Raw для вывода HtmlStrings / MvcHtmlStrings, то есть:

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

Если вы все еще предпочитаетекод помощника:

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

используется с

@Html.CommaSeparated(books.Select(book=>html.ActionLink(book.Title, "Action"))))
2 голосов
/ 17 июля 2011

Вы ищете это.

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

вызовите это, используя

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

Если вы хотите сделать его HtmlHelper, чтобы использовать его в Views, вы можете написатькак

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...