Как отправить данные из представления в контроллер при фильтрации по нескольким факторам?

В моем приложении у меня есть список выбора, в котором я фильтрую продукты по категориям, а также есть возможность фильтровать по названию продукта. Проблема в том, что поиск выполняется через текстовое поле, а фильтрация по категории - через список выбора, и эти 2 отправляют отдельные запросы на сервер. Обе эти функции отлично работают при использовании по отдельности, но когда я хочу выполнить фильтрацию по категории, а затем по названию продукта, фильтрация по категории сбрасывается, игнорируя то, что я выбрал.

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

Это контроллер, которому я отправляю данные.

    [HttpPost]
    public ActionResult Foods(string foodName, string _category)
    {
        var foodViewModel = new FoodListViewModel()
        {
            Foods = MenuItemLogic.GetFoodsToDisplay(foodName, _category),
            Categories = MenuItemLogic.GetCategories()
        };

        return PartialView("Foods",foodViewModel);
    }

Вот как я делал фильтрацию по категориям.

<ul id = "food-filter-list" class = "list-group list-group-flush text-center">
            <li class = "list-group-item">
                @Ajax.ActionLink("Összes", "Foods", "MenuItem" , null , new 
                AjaxOptions()
                {
                    HttpMethod = "POST",
                    UpdateTargetId = "page-content",
                    InsertionMode = InsertionMode.Replace,
                    AllowCache = true
                } , new { @class = Request["_category"] == "" || Request["_category"] == null ? "chosen-filter food-filter-item" : "food-filter-item" })
            </li>
            @foreach (var category in Model.Categories.Keys)
            {
                <li class = "list-group-item">
                    @Ajax.ActionLink(category, "Foods", "MenuItem", new{_category = category}, new AjaxOptions()
                    {
                        HttpMethod = "POST",
                        UpdateTargetId = "page-content",
                        InsertionMode = InsertionMode.Replace,
                        AllowCache = true
                    },  new { @class = Request["_category"] == category ? "chosen-filter food-filter-item" : "food-filter-item" })
                </li>
            }
        </ul>

Вот как я делал фильтрацию по названию продукта.

@using (Ajax.BeginForm("Foods", "MenuItem", 
        new AjaxOptions()
        {
            HttpMethod = "POST",
            UpdateTargetId = "page-content",
            InsertionMode = InsertionMode.Replace,
        }))
    {
    <div class = "row" style = "margin-left: 15px; margin-top: 10px">
        <div class = "row">
            <input style = "width: 87%; border-radius:0.3em" type = "text" name = "foodName" />
        </div>
        <div class = "row">
            <input class = "btn btn-success" type = "submit" value = "Keresés" />
        </div>
    </div>
    } 

Я хотел бы отправить эти 2 вместе в 1 запросе, если это возможно, или каким-то образом сохранить выбранную категорию, чтобы при вводе текста для фильтрации по названию продукта выбранная категория не сбрасывалась, а поиск применялся не только по названию продукта. .

Думаю, проблема в том, что вы не передали значение category в product и наоборот. Вы пытались установить выбранные значения из контроллера в ViewBag, а затем снова отправить их через форму?

Hameed 23.12.2018 15:27

К сожалению, я не понял, что вы имели в виду, устанавливая выбранные значения из контроллера, но да, проблема в том, что я не знал, как «сохранить значение 2 значений фильтрации» на стороне просмотра, например, когда я фильтровать категорию и название продукта одновременно. Я сначала выбираю категорию, сохраняю значение в «переменной» и отправляю эту «переменную» вместе с отправкой формы.

kristof 23.12.2018 15:34
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
96
0

Другие вопросы по теме