在MVC中将列表内联显示为文本

时间:2016-10-28 08:28:43

标签: c# html asp.net-mvc

我在ViewModel中有一个项目列表。对于列表中的每个项目,显示为列表。例如

@foreach (var item in Model.Items)
{
  <li><a href="link">@Html.DisplayFor(m => item.DisplayName)</a>
}

显示为:

  • 第1项
  • 第2项
  • 第3项
  • 第4项

但是如何显示它以便它具有&#34;和&#34;在最后一个项目之前,以及每个项目之后的逗号。像这样:

Item 1, Item 2, Item 3 and Item 4.

3 个答案:

答案 0 :(得分:4)

您可以使用纯CSS解决方案来执行此操作

&#13;
&#13;
ul.cs-list li {
  list-style: none;
  display: inline-block;
}

ul.cs-list li::after {
  content: ',';
}

ul.cs-list li:last-child::after {
  content: '.';
}

ul.cs-list li:nth-last-child(2)::after {
  content: 'and';
  margin-left: 2px;
}
&#13;
<ul class="cs-list">
  <li>Item 1</li>
  <li>Item 2</li>
  <li>Item 3</li>
  <li>Item 4</li>
</ul>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

在foreach中使用和索引变量(首先用0初始化它)并在每个循环中递增它,添加一个基于它的if语句,将它与Model.Items.Count-1进行比较将给出信息if它是前一个或不是。

答案 2 :(得分:0)

为了达到你想要的输出,我使用了一个计数器变量,用于考虑最后一个元素(应该附加'和'单词)。

using System;
using System.Collections.Generic;

public class Program
{
    public static void Main()
    {
        //Create List of Model
        var lst = new List<Model>();

        //Insert Elements into List
        lst.Add(new Model{ ID = 1, Name = "ABC"});
        lst.Add(new Model{ ID = 2, Name = "DEF"});
        lst.Add(new Model{ ID = 3, Name = "GHI"});
        lst.Add(new Model{ ID = 4, Name = "JKL"});
        lst.Add(new Model{ ID = 5, Name = "MNO"});

        //Actual Logic to get proper output
        int count = 0;
        string output = @"";
        foreach(var currentModel in lst){

        if(count == lst.Count - 1){
            output = output + "and " + "<a href='link'>" + currentModel.Name + "</a>";
        }
        else{
            output = output + "<a href='link'>" + currentModel.Name + "</a>" + ", ";
        }
        count ++;
    }
        ViewBag.Links = output; //Now you can use it on View
        Console.WriteLine(output);
    }
}

public class Model{
    public int ID { get; set; }
    public string Name { get; set; }
}