2010-07-12 2 views
0

Я хотел бы реализовать фильтрацию в представлении списка на основе значения в DropDownList в виде вызова «postback», когда пользователь выбирает значения выпадающего списка и нажимает кнопку «Обновить» кнопка. Я выяснил, что я должен использовать свою ViewData для указанной модели, но как передать выбранные значения обратно в переопределение индекса, которое принимает параметры фильтра?Фильтрация представления списка в приложении ASP.MVC

ответ

0

Почему бы не положить выпадающее меню в форме, которая имеет GET, как это метод. Затем вы создадите URL-адрес, который выглядит как http://mysite.com/controller/action/?filterView=ByName. Это позволяет вашим конечным пользователям добавлять свои отфильтрованные результаты для быстрой справки. Вы также можете создать новый маршрут, если не хотите? в URL.

Ваш контроллер будет чем-то подобным ниже (до вас, чтобы определить вашу логику фильтрации, поскольку я не знаю, выполняете ли вы диапазоны дат, избавляетесь от дубликатов, что угодно). Это предполагает, что вы фильтруете столбец.

public ActionResult Index(string filterView = "") 
    { 
     var items = _repository.getItems(); 
     // filter you items based on the filterView string 
     if (!string.IsNullOrEmpty(filterView)) 
     { 
      //do your filtering logic here 
      items = items.where(c=>c.FilterColumn = filterView); 
     } 
     //return the view with the items that result from the above operation or 
     //just the full list if no filtering was done 
     return View(items); 
    } 
0

Использование Routing API. Вы можете настроить новый маршрут в своем Global.asmx.cs, что означает, что вызовы к действию индекса на вашем контроллере с определенным URL-адресом будут отправлены на правильный контроллер.

Это может работает только до тех пор, пока имя параметра не соответствует имени параметра в вашем методе действий, но я менее уверен в этом.

0

ProfK - вы могли бы сделать это несколькими способами, тем более, что вы упоминаете подход «своего рода обратной передачи». в этом случае вам лучше всего сделать именно это - вернуть значения фильтра и «разобрать» их в методе индекса контроллера. что-то вдоль линий, это может быть подход:

public ActionResult Index() 
    { 
     string sComboValPerson = Request.Form["personfilter"]; 
     // now do something with this value if it is't null 
     if (!string.IsNullOrEmpty(sComboValPerson)) 
     { 
      var items = _repository.Search(Model, sComboValPerson); 
      return View(items); 
     } 
     else 
     // return some kind of not found content or the 'normal' view 
     return View(); 
    }