在 Blazor 中的每个 foreach 之间显示逗号
Display comma between each in foreach in Blazor
在主题的 foreach 中的以下代码中,我将如何显示带有逗号和 space 的主题。例如“主题、主题 2、主题 3”?另外,如果计数不小于 1,我将如何只显示一个主题?
<tbody>
@foreach (var piece in PieceService.Pieces)
{
<tr>
<td>@piece.Id</td>
<td>@piece.Title</td>
<td>@piece.Publisher.Name</td>
<td>@piece.Parts.Count()</td>
<td>@foreach (var theme in @piece.Themes)
{
@if (@piece.Themes.Count() > 1)
{
theme.Title, ;
}
else
{
theme.Title;
}
}
</td>
<td align="right">
<button class="btn btn-primary" @onclick="(() => ShowPiece(piece.Id))">Show</button>
<button class="btn btn-primary" @onclick="(() => EditPiece(piece.Id))">Edit</button>
<button class="btn btn-primary" @onclick="(() => DeletePiece(piece.Id))">Delete</button>
</td>
</tr>
}
</tbody>
在代码块中写一个方法
@code {
private string GetThemes(xxx themes)
{
StringBuilder sb = new StringBuilder();
themes.ForEach(item => sb.Append($"{item.Title}, "));
return sb.ToString().Trim().Trim(',');
}
}
然后:
<td>
@this.GetThemes(@piece.Themes)
</td>
您不必内联编写所有内容。
C# 有一个您可以使用的 .Last()
方法:
@{
Piece LastItem = PieceService.Pieces.Last();
foreach (var item in PieceService)
{
@item.Name
@if (item != LastItem)
{
@(", ")
}
}
}
我提供此答案作为其他纯 string-based 答案的替代方案,因为它仍然为添加 html 格式留有空间,包括 div
具有单独 onclick
的对象事件等,如果你愿意,稍后再说。
你可以使用这个语句来达到你想要的结果
<td>
@string.Join(", ", @piece.Themes.Select(x=> x.Title).ToArray())
</td>
一种使用System.Linq
的方式。
将 foreach 循环替换为 :
@(piece.Themes.Select(a => a.Title).Aggregate((a,b) => a+","+b ))
在主题的 foreach 中的以下代码中,我将如何显示带有逗号和 space 的主题。例如“主题、主题 2、主题 3”?另外,如果计数不小于 1,我将如何只显示一个主题?
<tbody>
@foreach (var piece in PieceService.Pieces)
{
<tr>
<td>@piece.Id</td>
<td>@piece.Title</td>
<td>@piece.Publisher.Name</td>
<td>@piece.Parts.Count()</td>
<td>@foreach (var theme in @piece.Themes)
{
@if (@piece.Themes.Count() > 1)
{
theme.Title, ;
}
else
{
theme.Title;
}
}
</td>
<td align="right">
<button class="btn btn-primary" @onclick="(() => ShowPiece(piece.Id))">Show</button>
<button class="btn btn-primary" @onclick="(() => EditPiece(piece.Id))">Edit</button>
<button class="btn btn-primary" @onclick="(() => DeletePiece(piece.Id))">Delete</button>
</td>
</tr>
}
</tbody>
在代码块中写一个方法
@code {
private string GetThemes(xxx themes)
{
StringBuilder sb = new StringBuilder();
themes.ForEach(item => sb.Append($"{item.Title}, "));
return sb.ToString().Trim().Trim(',');
}
}
然后:
<td>
@this.GetThemes(@piece.Themes)
</td>
您不必内联编写所有内容。
C# 有一个您可以使用的 .Last()
方法:
@{
Piece LastItem = PieceService.Pieces.Last();
foreach (var item in PieceService)
{
@item.Name
@if (item != LastItem)
{
@(", ")
}
}
}
我提供此答案作为其他纯 string-based 答案的替代方案,因为它仍然为添加 html 格式留有空间,包括 div
具有单独 onclick
的对象事件等,如果你愿意,稍后再说。
你可以使用这个语句来达到你想要的结果
<td>
@string.Join(", ", @piece.Themes.Select(x=> x.Title).ToArray())
</td>
一种使用System.Linq
的方式。
将 foreach 循环替换为 :
@(piece.Themes.Select(a => a.Title).Aggregate((a,b) => a+","+b ))