В моем приложении у меня есть список выбора, в котором я фильтрую продукты по категориям, а также есть возможность фильтровать по названию продукта. Проблема в том, что поиск выполняется через текстовое поле, а фильтрация по категории - через список выбора, и эти 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 запросе, если это возможно, или каким-то образом сохранить выбранную категорию, чтобы при вводе текста для фильтрации по названию продукта выбранная категория не сбрасывалась, а поиск применялся не только по названию продукта. .
К сожалению, я не понял, что вы имели в виду, устанавливая выбранные значения из контроллера, но да, проблема в том, что я не знал, как «сохранить значение 2 значений фильтрации» на стороне просмотра, например, когда я фильтровать категорию и название продукта одновременно. Я сначала выбираю категорию, сохраняю значение в «переменной» и отправляю эту «переменную» вместе с отправкой формы.





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