просмотр связи с контроллером - PullRequest
1 голос
/ 08 апреля 2009

Я пытаюсь выяснить, как лучше всего взаимодействовать с контроллером представления для случая, когда мне, например, нужна фильтрация.

У меня есть коллекция элементов на странице и фильтр управления. Я фильтрую элементы по письму, статусу и т. Д. Это простой сценарий, я отправляю выбранные значения фильтра в контроллер, и контроллер возвращает результаты на страницу.

Если подумать, это цикл в одном направлении. Просмотрите контроллер вызовов с параметрами (значениями фильтров), контроллер вызывает базу данных, а затем извлекает элементы и возвращает эти элементы в представление. Есть ли способ отправить контроллеру эти элементы и контроллер только для их фильтрации и возврата отфильтрованной коллекции в представление? Или, может быть, сократить эту поездку на сервер, дать контроллеру только идентификаторы элементов, а контроллеру узнать, какой из элементов извлечь из базы данных, а затем отфильтровать их, вернуть отфильтрованную коллекцию ...

Плохая практика? Некоторые работают вокруг?

Что ты думаешь?

Спасибо

1 Ответ

0 голосов
/ 10 апреля 2009

То, как я это сделал, похоже на то, что вы упоминали в своем последнем параграфе:

отправить контроллеру эти элементы и контроллеру только для того, чтобы отфильтровать их и вернуть отфильтрованную коллекцию обратно

Вы можете использовать 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);
}

Код, возможно, не синтаксически правильный, но все готово - удачи.

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