public async Task <IActionResult> Index(string sortOrder, string currentFilter, string searchString, int?pageIndex = 1, int pageSize = 10)
        {
            ViewData["CurrentPageSize"]      = pageSize;
            ViewData["CurrentSort"]          = sortOrder;
            ViewData["NameSortParm"]         = string.IsNullOrEmpty(sortOrder) ? "name_desc" : "";
            ViewData["SlugSortParm"]         = sortOrder == "Slug" ? "slug_desc" : "Slug";
            ViewData["CreatedDateSortParm"]  = sortOrder == "CreatedDate" ? "createdDate_desc" : "CreatedDate";
            ViewData["ModifiedDateSortParm"] = sortOrder == "ModifiedDate" ? "modifiedDate_desc" : "ModifiedDate";

            if (searchString != null)
            {
                pageIndex = 1;
            }
            else
            {
                searchString = currentFilter;
            }

            ViewData["CurrentFilter"] = searchString;

            Expression <Func <Tag, bool> > filter = null;

            if (!string.IsNullOrEmpty(searchString))
            {
                filter = c => c.Name.Contains(searchString) || c.Slug.Contains(searchString);
            }

            Func <IQueryable <Tag>, IOrderedQueryable <Tag> > orderBy = null;

            switch (sortOrder)
            {
            case "name_desc":
                orderBy = q => q.OrderByDescending(c => c.Name);
                break;

            case "Slug":
                orderBy = q => q.OrderBy(c => c.Slug);
                break;

            case "slug_desc":
                orderBy = q => q.OrderByDescending(c => c.Slug);
                break;

            case "CreatedDate":
                orderBy = q => q.OrderBy(c => c.CreatedDate);
                break;

            case "createdDate_desc":
                orderBy = q => q.OrderByDescending(c => c.CreatedDate);
                break;

            case "ModifiedDate":
                orderBy = q => q.OrderBy(c => c.ModifiedDate);
                break;

            case "modifiedDate_desc":
                orderBy = q => q.OrderByDescending(c => c.ModifiedDate);
                break;

            default:
                orderBy = q => q.OrderBy(c => c.Name);
                break;
            }

            var tags = await _tagServices.GetAsync(filter : filter, orderBy : orderBy, pageIndex : pageIndex ?? 1, pageSize : pageSize);

            return(View(tags));
        }