• 1405/08/02

ازبین رفتن فیلتر ها هنگام تغییر صفحه در pagination :

با سلام خدمت استاد گرامی و دوستان

در قسمت 50 هنگامی که ما Url رو در ViewBag به این صورت "Admin/User/" به صفحه میفرستیم اگر فیلتری اعمال کرده باشیم با عوض کردن صفحه ازبین میره و همه کاربران رو نشون میده. برای حل این مشکل و استفاده از اون توی بقیه ماژول ها این تکه کد رو توی AdminPaginationPartial قرار بدیم فیلتر ها دیگه از بین نمیرن و میتونیم روی دیتای فیلتر شده صفحه بندی داشته باشیم.

 

@using HStoreCom.Domain.ViewModels._0_Common
@model PagingViewModel
@{
    Layout = null;

    ViewBag.Url = Url.Action(
    ViewContext.RouteData.Values["action"]?.ToString(),
    ViewContext.RouteData.Values["controller"]?.ToString(),
    new { area = ViewContext.RouteData.Values["area"] }
    );

    var query = Context.Request.Query
    .Where(q => q.Key != "PageId")
    .ToDictionary(q => q.Key, q => q.Value.ToString());

    string GetPageUrl(int pageId)
    {
        var parameters = new Dictionary<string, string>(query)
        {
            ["PageId"] = pageId.ToString()
        };

        return $"{ViewBag.Url}?{string.Join("&",
            parameters.Select(p =>
                $"{Uri.EscapeDataString(p.Key)}={Uri.EscapeDataString(p.Value)}"))}";
    }
}

و در لینک دکمه ها متد GetPageUrl رو فراخوانی میکنیم:

 

if (Model.PageId == i)
{
    <li class="page-item active">
        <a class="page-link" href="@GetPageUrl(i)">@i</a>
    </li>
}
else
{
    <li class="page-item">
        <a class="page-link" href="@GetPageUrl(i)">@i</a>
    </li>
}

این روشی بود که من انجام دادم برای صفحه بندی روی دیتا اگر فیلتری داشته باشه . ممنون میشم اگر نظرتون رو بگید و اگر جاییش ایراد داره توضیح بدید.