Home > Enterprise >  How to get Iteration Number inside @foreach loop by using ASP.NET Core inside the view
How to get Iteration Number inside @foreach loop by using ASP.NET Core inside the view

Time:10-29

I am new to ASP.NET Core development. I am looking for something like a built-in way to use loop iteration numbers inside the view of ASP.NET Core.

I did some research and found solutions like creating int variable outside the loop and then increment inside the loop.

I want to index each user.

Here is my code:

@foreach (var item in l_IEnumerableModUserQuery)
{
    <tr>
        <td> 
            <!-- Here I want to add Iteration No. here--> 
        </td>
        <td>
            <a href="#">
                @item.Pr_FullName
            </a>
        </td>
        <td>@item.Pr_Email</td>
        <td>@item.Pr_ContactNo</td>
    </tr>
}

CodePudding user response:

You could use a simple for loop to get the index:

//use .Count if it is a List or .Count() with Linq to get the boundary.
@for(var i = 0; i < l_IEnumerableModUserQuery.Count; i  )
{
    <tr>
        <td> 
            @i.ToString();
        </td>
        <td>
            <a href="#">
                @l_IEnumerableModUserQuery[i].Pr_FullName
            </a>
        </td>
        <td>@l_IEnumerableModUserQuery[i].Pr_Email</td>
        <td>@l_IEnumerableModUserQuery[i].Pr_ContactNo</td>
    </tr>
}

Thomas Levesque has a neat approach on his blog, using an extension method:

public static IEnumerable<(T item, int index)> WithIndex<T>(this IEnumerable<T> source)
{
    return source.Select((item, index) => (item, index));
}

Which would result in:

@foreach (var (item, idx) in l_IEnumerableModUserQuery.WithIndex())
{
    <tr>
        <td> 
            @idx
        </td>
        <td>
            <a href="#">
                @item.Pr_FullName
            </a>
        </td>
        <td>@item.Pr_Email</td>
        <td>@item.Pr_ContactNo</td>
    </tr>
}

With an eye on the extension methods approach, you could as well amend your views model and include the index as a property in your model inside your controller / handler or whereever your model is created:

var l_IEnumerableModUserQuery = 
     someSource.Where(x => ...)
               .Select((x, index) => new MyModel {
                     Index = index,
                     Pr_Email = xxx,
                     Pr_Contact = xxy,
                     /* ... rest of model */
               });
return l_IEnumerableModUserQuery;

After this you could access the index like any other property in your view:

 <a href="#">
       @item.Index
 </a>

CodePudding user response:

you can findout the index of the item

 @{
int indx=0;}

@foreach (var item in l_IEnumerableModUserQuery)
                {
                <tr>
                    <td> 
                        @l_IEnumerableModUserQuery.IndexOf(item) 
                    </td>
                    <td>
                        <a href="#">
                            @item.Pr_FullName
                        </a>
                    </td>
                    <td>@item.Pr_Email</td>
                    <td>@item.Pr_ContactNo</td>
                </tr>
                }
  • Related