Здравствуйте, не могли бы вы помочь с этим. Я использую приложение asp.net mvc 5, мой домашний вид состоит из 2 частей. Один, где данные показаны, а другой, который фильтрует эти данные. Пока я просто показываю все свои данные без фильтрации. Я прочитал несколько учебных пособий, но они используют меньше свойств для фильтрации. В моем случае у меня действительно большие данные для фильтрации (более 10 свойств).
Итак, я нашел рекомендацию использовать viewmodel в качестве параметра для фильтра, но не было никаких предложений о том, как реализовать представление и контроллер.
Я подготовился к этой работе, взял всю логику из контроллера, создал отдельный класс, называемый бизнес-логикой, и поместил туда следующий код:
public IQueryable<ModelDTO> GetData(FilterViewModel filter)
{
var main = (from data in db.Table
// Other commands
select new
{
data.Id,
data.Title,
data.Creteria1,
data.Creteria2,
// Other fields
}).ToList();
// Other logic
if (filter != null)
{
// TODO develop the filter logic
if (filter.Creteria1.HasValue)
{
main = main.Where(x => x.Creteria1 == filter.Creteria1);
}
if (filter.Creteria2.HasValue)
{
main = main.Where(x => x.Creteria2 == filter.Creteria2);
}
// etc.
}
return main.AsQueryable();
}
My controller looks like this:
public ActionResult Index(FilterViewModel f)
{
var b = new BusinessLogic();
var m = b.GetData(f);
return View(m);
}
На мой взгляд, я реализовал html-формы со всеми полями, как сопоставить их с FilterViewModel?
Мне нужно всякий раз, когда пользователь меняет поля в форме фильтра и нажимает кнопку «Отправить» для фильтрации данных.
Мне нужно по умолчанию заполнить FilterViewModel, поэтому изначально он загрузит все данные.
Также, на мой взгляд, я использую DTOModel, поэтому я не могу просто использовать FilterViewModel.