迭代收集并在Razor中打印索引和项目

时间:2011-07-13 05:54:41

标签: asp.net-mvc asp.net-mvc-3 razor

我的剃刀视图出了问题。我有以下内容:

public ICollection<Topic> Topics

public class Topic
{
    public string Description { get; set; }
}

我想迭代整个集合并打印出如下结果:

    @foreach (int index in Enumerable.Range(0, Model.Topics.Count())){

        <div>@(index). Model.Topics[@(index)].Description"</div>
    }

问题是我得到的只有:

0. Model.Topics[0].Description"
1. Model.Topics[1].Description"

我尝试了各种各样的东西,但仍然无法得到描述。

我做错了什么: - (

3 个答案:

答案 0 :(得分:13)

试试这样:

@foreach (var item in Model.Topics)
{
    <div>@Model.Topics.IndexOf(item). @item.Description</div>
}

答案 1 :(得分:7)

这应该有效:

@{int i = 0;}
@foreach (Topic tp in Model.Topics){
    <div>@(i++).ToString() @tp.Description</div>
}

您正在尝试使用foreach像for循环一样。 (可能就像一个C ++迭代器?)然而,foreach是一种语法糖,可以帮助你完成所有这些工作。

在C#foreach循环中对类型集合进行循环。所以如果你有:

int[] numbers = new int[] {1,2,3,4};
Person[] persons = //collection of persons

循环将是:

foreach(int n in numbers) { /*n would be each of the numbers*/  }
foreach(Person p in persons) 
    {/* p here would refer to each person per iteration*/ }

适用于任何IEnumerable(即IList,Arrays,Collections等)

答案 2 :(得分:0)

尝试:

@foreach (int index in Enumerable.Range(0, Model.Topics.Count())){

        <div>@(index). @Model.Topics[index].Description</div>
}

甚至更好:

@{ int i = 1; }
@foreach (var topic in Model.Topics){
    <div>@(i++). @topic.Description</div>
}