Передача фильтра как объекта из представления в контроллерC#

Место общения программистов C#
Anonymous
Передача фильтра как объекта из представления в контроллер

Сообщение Anonymous »

Я пытаюсь реализовать фильтрацию и подкачку в контроллере MVC. Я передаю информацию в View с помощью ViewBag.

Класс фильтра:

Код: Выделить всё

public class Criteria
{
public int? SnapshotKey { get; set; }
public string Delq { get; set; }

public override string ToString()
{
string[] Ares = new string[2];
if (SnapshotKey.HasValue)
Ares[0] = "SnapshotKey=" + SnapshotKey.ToString();
if (!String.IsNullOrWhiteSpace(Delq))
Ares[1] = "Delq=" + Delq;

return String.Join("&", Ares.Where(s => !string.IsNullOrWhiteSpace(s)));
}
}
Мой метод контроллера выглядит следующим образом:

Код: Выделить всё

public ActionResult Search(Criteria filter, string filterString,
int pageNo = 1, int pageSize = 5)
{
using (DemoDBEntities db = new DemoDBEntities())
{
var list = db.BMH.AsQueryable();
if (filter != null)
{
if (filter.SnapshotKey.HasValue)
list = list.Where(r => r.SnapshotKey == filter.SnapshotKey.Value);
if (!String.IsNullOrWhiteSpace(filter.Delq))
list = list.Where(r => r.Delq == filter.Delq);
}
list = list.OrderBy(r=>r.SnapshotKey).Skip((pageNo - 1) * pageSize).Take(pageSize);
ViewBag.Criteria = filter.ToString();
ViewBag.CriteriaString = filterString;
ViewBag.PageNo = pageNo;
return View(list.ToList());
}
}
AFAIK, я не могу передать ViewBag как объект контроллеру, поэтому я использовал filter.ToString() для хранения текущего фильтра.

В представлении у меня есть ссылка ниже для перехода на конкретную страницу с сохранением текущего фильтра.

Код: Выделить всё

@Html.ActionLink("Next Page", "Search", new { filter = ViewBag, filterString = ViewBag.CriteriaString, pageNo = ViewBag.PageNo + 1, pageSize = 5 })
Поэтому, возвращаясь из просмотра, я получаю текущий фильтр в виде строки. Теперь в контроллере мне нужно преобразовать строку в класс Criteria. Это выполнимо, но я ищу более достойный способ сделать то, что мне нужно.

Подробнее здесь: https://stackoverflow.com/questions/408 ... controller

Вернуться в «C#»