То, как я это сделал, похоже на то, что вы упоминали в своем последнем параграфе:
отправить контроллеру эти элементы и контроллеру только для того, чтобы отфильтровать их и вернуть отфильтрованную коллекцию обратно
Вы можете использовать linq для этого. Итак, давайте скажем, что вы отправляете в список. Поэтому, когда вы выполняете свой фильтр - скажем, по категории - вы ожидаете отфильтрованный список по категориям (скажем, Category = "Book").
Итак, в вашем контроллере ваше действие List () (или как вы его называете) должно быть готово принять параметр фильтра. Основываясь на этом параметре, используйте LINQ, чтобы сузить коллекцию для передачи в представление. Как это:
public ActionResult List(bool fromCache, string filter)
{
// if filtering - always pull from cache to increase performance
ProductList productList;
if (fromCache)
productList = Session[SessionKeys.ProductList] as ProductList;
else
{
productList = ProductInfoList.GetProductInfoList();
Session[SessionKeys.ProductInfoList] = productList;
}
// apply filter
var data = productList.Where(p => p.Category == filter);
return View(ViewLocations.ProductListing, data);
}
Код, возможно, не синтаксически правильный, но все готово - удачи.