Я хотел бы реализовать фильтрацию в представлении списка на основе значения в DropDownList в виде вызова «postback», когда пользователь выбирает значения выпадающего списка и нажимает кнопку «Обновить» кнопка. Я выяснил, что я должен использовать свою ViewData для указанной модели, но как передать выбранные значения обратно в переопределение индекса, которое принимает параметры фильтра?Фильтрация представления списка в приложении ASP.MVC
ответ
Почему бы не положить выпадающее меню в форме, которая имеет 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);
}
Использование Routing API. Вы можете настроить новый маршрут в своем Global.asmx.cs
, что означает, что вызовы к действию индекса на вашем контроллере с определенным URL-адресом будут отправлены на правильный контроллер.
Это может работает только до тех пор, пока имя параметра не соответствует имени параметра в вашем методе действий, но я менее уверен в этом.
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();
}