Search code examples
asp.net-coremodel-view-controller

ascending order of data from database by Id


I am trying to learn asp.net-core, and I am stuck on trying to retieve the data from database in ascending order of database Id, my code is below but not sure why its not doing it, it does acccessnding order by page but I want all the data in ascending order by database Id, any pointers wold be great...

    @model IEnumerable<Citrus.Models.Customers>

@{
    ViewData["Title"] = "Index";

    Pager pager = new Pager();
    int pageNo = 0;

    if (ViewBag.Pager !=null)

    {
        pager = ViewBag.Pager;
        pageNo = pager.CurrentPage;
    }


}


<form asp-controller="Customers" asp-action="Index">
    <p>


        <div class="container body-content">
            <div class="row">
                <div class="col-lg-6">

                    <div class="form-group">
                        <label class="control-label" for="searchString"></label>
                        <div class="input-group">
                            <input class="form-control" type="text" name="searchString" placeholder="Search by company name" />
                            <span class="input-group-btn" name="searchString"><button class="btn btn-default btn-primary mr-1"><i class="fas fa-search"></i> Search</button></span>
                            @*<span asp-validation-for="searchString"></span>*@
                            <a class="btn btn-primary" asp-action="Create"><i class="far fa-plus-square"></i> Customer</></a>
                        </div>

                    </div>
                </div>
            </div>
        </div>

    </p>

</form>

<table class="table">
    <thead>
        <tr>
            <th>
                @Html.DisplayNameFor(model => model.Company)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Title)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.FirstName)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Surname)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Tel)
            </th>

            <th></th>
        </tr>
    </thead>
    <tbody>                                
        @foreach (var item in Model.OrderByDescending(i => i.Id))
        {
            <tr>
                <td>
                    @Html.DisplayFor(modelItem => item.Company)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.Title)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.FirstName)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.Surname)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.Tel)
                </td>

                <td>
                    <a asp-action="Edit" asp-route-id="@item.Id"><i class="fas fa-edit"></i></a> |
                    <a asp-action="Details" asp-route-id="@item.Id"><i class="fas fa-info-circle"></i></a> |
                    <a asp-action="Delete" asp-route-id="@item.Id"><i class="fas fa-trash-alt"></i></a>
                </td>
            </tr>
        }
    </tbody>
</table>

<div class="container">
    @if (pager.TotalPages > 0)

    {
        <ul class="pagination justify-content-end">

@if (pager.CurrentPage > 1)
{ 

    <li class="page-item">
        <a class="page-link" asp-controller="Customers" asp-action="Index" asp-route-pg="1">First</a>
        </li>
        <li>
            <a class="page-link" asp-controller="Customers" asp-action="Index" asp-route-pg="@(pager.CurrentPage -1)">Previous</a>

        </li>
}
















        @for (var pge = pager.StartPage; pge <= pager.EndPage; pge++)

        {
            <li class="page-item @(pge == pager.CurrentPage ? "active" : "")">
                <a class="page-link" asp-controller="Customers" asp-action="Index" asp-route-pg="@pge"> @pge</a>
            </li> 
        }


            @if (pager.CurrentPage < pager.TotalPages)

            {
                <li class="page-item">
                    <a class="page-link" asp-controller="Customers" asp-action="Index" asp-route-pg="@(pager.CurrentPage + 1)">Next</a>
                </li>
                <li>
                    <a class="page-link" asp-controller="Customers" asp-action="Index" asp-route-pg="@(pager.TotalPages)">Last</a>
                </li>

            }

        </ul>

    }




</div>

Many Thank John


Solution

  • You need to use OrderBy in backend,use OrderBy firstly,and then get the current page data,for example:

    List<Citrus.Models.Customers> data = _context.Customers
        .OrderBy(c => c.Id)
        .Skip(position).Take(pageSize)
        .ToList();
    

    For details,you can refer to the official doc.