Какой самый элегантный способ использования частичного представления для отображения набора элементов, разделенных запятыми? - PullRequest
3 голосов
/ 29 июня 2009

Мне нужно отобразить список объектов Person, скажем, в формате с разделителями-запятыми, используя частичное представление в ASP.NET MVC. Моя проблема заключается в том, что при визуализации с использованием следующего кода:

<% foreach (var person in Model) { %>
    <%= Html.ActionLink<PersonController>(c => c.Edit(person.PersonID), Html.Encode(person.Name)) %>,&nbsp;
<% } %>

Я получаю запятую после последнего элемента. Какой самый элегантный / наименее глупый способ сделать этот список людей без последней запятой?

Мои два варианта, пока без порядка, будут:

  1. Используйте JavaScript, чтобы удалить запятую на стороне клиента
  2. Создать список вручную, используя код вместо разметки в частичном представлении

Ни один из этих вариантов мне не подходит - есть идеи?

Спасибо!

Ответы [ 4 ]

3 голосов
/ 29 июня 2009

Как насчет:

<%=String.Join(
    ",",
    Model.Select(
        person=>
            Html
            .ActionLink<PersonController>(
                c => c.Edit(person.PersonID), 
                Html.Encode(person.Name)
            )
    )
    .ToArray()
)%>

(непроверенные)

2 голосов
/ 29 июня 2009
<% bool first = true;
   foreach (var person in Model) { 
     if (first) first = false; else Response.Write(","); %>
     <%= Html.ActionLink<PersonController>(c => c.Edit(person.PersonID), Html.Encode(person.Name)) %>
<% } %>
1 голос
/ 29 июня 2009

Использование LINQ Aggregate для объединения ссылок через запятую без добавления запятой.

<%= Model.Select(person => Html.ActionLink<PersonController>(c => c.Edit(person.PersonID), Html.Encode(person.Name))
         .Aggregate((links, link) => links + ", " + link) %>
1 голос
/ 29 июня 2009

Я думаю, что вместо foreach вам придется перебирать коллекцию лиц с использованием обычного цикла for. Таким образом, вы можете обнаружить последнюю итерацию цикла и избежать последней запятой.

<% { int count=Model.Persons.Count();
     for (int i=0; i< count; i++) { %>
     <%= Html.ActionLink<PersonController>(c => c.Edit(Persons[i].PersonID), Html.Encode(Persons[i].Name)) %>
     <% if (i < count) { Response.Write(","); } 
   } %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...