Переберите коллекцию и напечатайте Индекс и Предмет в Razor - PullRequest
3 голосов
/ 13 июля 2011

У меня проблемы с моим видом бритвы.У меня есть следующее:

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 ]

13 голосов
/ 13 июля 2011

Попробуй так:

@foreach (var item in Model.Topics)
{
    <div>@Model.Topics.IndexOf(item). @item.Description</div>
}
7 голосов
/ 13 июля 2011

Это должно работать:

@{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 и т. Д.)

0 голосов
/ 13 июля 2011

Попробуйте:

@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>
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...