У меня довольно стандартная форма сортировки / фильтрации / поиска по страницам, но мне нужен контроль над форматом URL. Все параметры sort / filter / page должны быть частью URL-адреса, чтобы, например, адрес мог быть отправлен кому-либо по электронной почте.
Когда добавляется другой параметр фильтра, выполняется запрос POST. Мой метод контроллера выглядит следующим образом:
[HttpPost]
public ActionResult Search(string filterField,
Operator filterOperator,
string filterValue,
PeopleGroupSearchModel model);
PeopleGroupSearchModel
заполняется из параметров строки запроса. filter*
параметры поступают из опубликованных значений формы.
Я хотел бы проанализировать предоставленные значения фильтров, которые затем добавят фильтр к коллекции в модели с именем Filters
. Затем возьмите обновленную модель и преобразуйте ее в соответствующий URL-адрес и передайте его в качестве ответа пользователю.
Так, например, если они есть на этой странице:
PeopleGroup/Search?page=4&sort=Country
... и POST:
- filterField = PeopleGroupName
- filterOperator = равно
- filterValue = Zulu
... как только вся обработка завершена, адрес в их браузере должен выглядеть примерно так:
PeopleGroup/Search?page=4&sort=Country&PeopleGroupName=Zulu&PeopleGroupName_op=Equals
Итак, более или менее то, что я пытаюсь сделать:
[HttpGet]
public ActionResult Search(PeopleGroupSearchModel model)
{
PeopleGroupData.Search(model);
ViewData.Model = model;
return View();
}
[HttpPost]
public ActionResult Search(string filterField,
Operator filterOperator,
string filterValue,
PeopleGroupSearchModel model)
{
PeopleGroupFilter filter = ParseFilter(filterField,
filterOperator,
filterValue);
model.Filters.Add(filter);
return RedirectToAction("Search", ???);
}
Я очень новичок в MVC, поэтому, если я пойду совершенно неправильно, пожалуйста, дайте мне знать!