Подтвердить что ты не робот

Простой синтаксис шаблона бритвы для включения запятой для разделения имен

У меня есть следующий шаблон html бритвы, хотя я не могу понять, как включить запятую для разделения имен в разметке!? При попытке выполнить следующий код я получаю ; expected как ошибку компилятора!. Мне также нужно удалить последнюю запятую.

@foreach (People person in Model.People)
{
  person.Name,
}

Я хочу: Тед, Джеймс, Дженни, Том

4b9b3361

Ответ 1

Как насчет string.Join вместо foreach (он даже решает запятую после последней проблемы с элементом):

@String.Join(", ", Model.People.Select(p => p.Name).ToArray())

Ответ 2

Вы можете использовать <text></text> для включения литерала в шаблон Razor. Чтобы опустить последнюю запятую, я использовал бы цикл for, а не foreach.

@{
    var peopleList = Model.People.ToList();

    for( int i = 0; i < peopleList.Count; i++ )
    {
        @peopleList[i].Name
        if( i < peopleList[i].Count - 1 )
        {
            <text>,</text>
        }
    }
}

Как указывает @nemesv, если все, что вы делаете, это создание и отображение строки с разделителями, string.Join() - более чистый способ выполнить это. Если вы создаете более сложную разметку, вам, вероятно, понадобится использовать цикл.

Ответ 3

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

@foreach (People person in Model.People)
{
  @[email protected]((person != Model.People.Last()) ? "," : "")
}               

Ответ 4

Попробуйте что-нибудь вроде

@foreach (People person in Model.People)
{
  @person.Name<text>,</text>
}

Ответ 5

@foreach (People person in Model.People)
{
  person.Name<text>,&nbsp;</text>
}

или лучше:

string.Join(", ", Model.People.Select(x => x.Name).ToArray()) 

Ответ 6

Попробуйте следующее:

bool firstIteration = true

@foreach (People person in Model.People)
{

if(firstIteration)

{

  @: person.Name

}

else

{

 @: "," + person.Name

}

firstIteration = false;

} 

Ответ 7

Идея для сценария, где вам нужно делать дополнительные "вещи" в цикле foreach, а не просто отображать дисплей.

// index.cshtml
@{ var lastPerson = Model.People.LastOrDefault(); }
@foreach (People person in Model.People)
{
    var display = person != lastPerson ? $"{person.Name}, " : person.Name;
    <a href="@person.Href">@display</a>
}

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

// StringExtensions.cs
public class StringExtensions
{
    public static string DisplayAsCommaListItem(
        this string str, object currentItem, object lastItem)
    {
        return currentItem != lastItem ? $"{str}, " : str;
    }
}

Тогда код вида будет...

// index.cshtml
@{ var lastPerson = Model.People.LastOrDefault(); }
@foreach (People person in Model.People)
{
    <a href="@person.Href">@person.Name.DisplayAsCommaListItem(person, lastPerson)</a>
}