public async Task <IActionResult> Index(BeneficiarioListInputModel model) { ViewData["Title"] = "Lista Beneficiari".ToUpper(); ListViewModel <BeneficiarioViewModel> viewModel = new(); viewModel = await service.GetBeneficiariAsync(model); BeneficiarioListViewModel view = new BeneficiarioListViewModel { Beneficiari = viewModel, Input = model }; return(View(view)); }
public Task BindModelAsync(ModelBindingContext bindingContext) { //Recuperiamo i valori grazie ai value provider string search = bindingContext.ValueProvider.GetValue("Search").FirstValue; string orderBy = bindingContext.ValueProvider.GetValue("OrderBy").FirstValue; int.TryParse(bindingContext.ValueProvider.GetValue("Page").FirstValue, out int page); bool.TryParse(bindingContext.ValueProvider.GetValue("Ascending").FirstValue, out bool ascending); //Creiamo l'istanza del CourseListInputModel BeneficiariOptions options = coursesOptions.CurrentValue; var inputModel = new BeneficiarioListInputModel(search, page, orderBy, ascending, options.PerPage, options.Order); //Impostiamo il risultato per notificare che la creazione è avvenuta con successo bindingContext.Result = ModelBindingResult.Success(inputModel); //Restituiamo un task completato return(Task.CompletedTask); }
public async Task <ListViewModel <BeneficiarioViewModel> > GetBeneficiariAsync(BeneficiarioListInputModel model) { IQueryable <Beneficiario> baseQuery = dbContext.Beneficiari; switch (model.OrderBy) { case "Beneficiario": if (model.Ascending) { baseQuery = baseQuery.OrderBy(z => z.Sbeneficiario); } else { baseQuery = baseQuery.OrderByDescending(z => z.Sbeneficiario); } break; case "Descrizione": if (model.Ascending) { baseQuery = baseQuery.OrderBy(z => z.Descrizione); } else { baseQuery = baseQuery.OrderByDescending(z => z.Descrizione); } break; } IQueryable <BeneficiarioViewModel> queryLinq = baseQuery .AsNoTracking() .Where(beneficiari => beneficiari.Sbeneficiario.Contains(model.Search)) .Select(beneficiari => BeneficiarioViewModel.FromEntity(beneficiari)); //Usando metodi statici come FromEntity, la query potrebbe essere inefficiente. Mantenere il mapping nella lambda oppure usare un extension method personalizzato List <BeneficiarioViewModel> beneficiari = await queryLinq .Skip(model.Offset) .Take(model.Limit) .ToListAsync(); //La query al database viene inviata qui, quando manifestiamo l'intenzione di voler leggere i risultati int totalCount = await queryLinq.CountAsync(); ListViewModel <BeneficiarioViewModel> results = new ListViewModel <BeneficiarioViewModel> { Results = beneficiari, TotalCount = totalCount }; return(results); }
public Task <ListViewModel <BeneficiarioViewModel> > GetBeneficiariAsync(BeneficiarioListInputModel model) { return(beneficiarioService.GetBeneficiariAsync(model)); }