Как мы можем пропустить необязательные нулевые параметры при использовании пагинации через маршрутизацию атрибутов в MVC C #? - PullRequest
0 голосов
/ 27 апреля 2018

Я использую атрибутную маршрутизацию в приложении MVC 5 на контроллере, который используется для получения списка и выполняет поиск, сортировку и разбиение на страницы:

    [HttpGet]    
    [Route("Admin/UserList/{searchBy?}/{search?}/{page?}/{sortBy?}")]  
    public ActionResult AdminUserList(string searchBy, string search, int? 
           page, string sortBy)
    {  
       IEnumerable<Employee> employees=new List<Employee>();
        string emailid=Session["EmailId"].ToString();
        var role = (from users in db.Employees where users.EmailId == 
         emailid select users.Role).SingleOrDefault();
        if (role==Roles.superAdmin)
        {
            employees = (from users in db.Employees where users.Role == 
            Roles.user || users.Role == Roles.admin select 
            users).AsEnumerable();

        }

        else
        {
            employees = (from users in db.Employees where users.Role == Roles.user select users).AsEnumerable();           
        }         
            ViewBag.NameSort = String.IsNullOrEmpty(sortBy) ? "Name desc" : ""; 


            if (searchBy == "Email ID")
            {
                employees = employees.Where(x => search == null || x.EmailId.Contains(search));
            }
            else
            {
                employees = employees.Where(x => search == null || x.Name.Contains(search));
            }

            switch (sortBy)
            {
                case "Name desc":
                    employees = employees.OrderByDescending(x => x.Name);
                    break;
                default:
                    employees = employees.OrderBy(x => x.Name);
                    break;
            }
            return View(employees.ToPagedList(page ?? 1, 6));              
    }

Для URL - rootURL / Admin / UserList / name - он работает нормально и извлекает весь список пользователей по имени, поскольку {search} = null.

Но если пользователь хочет отсортировать по «Name desc», то URL будет - rootURL / Admin / UserList / name / Name% 20desc,

в этих нескольких параметрах, таких как {page}, {search} не указан в URL и как контроллер распознает то же самое.

Я пытался предоставить два разных маршрута для контроллера, но он будет принимать много комбинаций. Нравится -

[Маршрут ( "Администратор / UserList / {searchBy?} / {Искать?} / {SortBy?}")]
[Маршрут ( "Администратор / UserList / {searchBy?} / {Искать?} / {Страница?} / {SortBy?}")]
и так далее ...

Как мы отобразим этот запрос оптимальным образом -

RootUrl / Admin / UserList / name / t / Name% 20desc

т.е. искать, если имя имеет букву "t" и показывать результат путем сортировки имени в порядке убывания.

Также, как я буду отображать запрос на тот же контроллер, используя бритву?

@Html.PagedListPager(Model, page => Url.Action("UserList", new
   {
       page,
       searchBy = Request.QueryString["searchBy"],
       search = Request.QueryString["search"],
       sortBy = Request.QueryString["sortBy"]
    }),
      new PagedListRenderOptions() { Display = 
       PagedListDisplayMode.IfNeeded, DisplayPageCountAndCurrentLocation = 
      true })

Спасибо за вашу помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...