Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

178
Vistas
PagedList y asíncrono

Estoy usando PagedList en mis vistas, pero mi controlador con andamios se genera con este tipo de acción de índice predeterminada:

 public async Task<ActionResult> Index() { return View(await db.Claimants.ToListAsync()); }

No encontré una extensión para que PagedList funcione con async . Mis métodos tienen que ser cambiados a una forma como esta:

 public ActionResult Index(int? page) { var claimants = db.Claimants.OrderBy(b => b.Name); var notNullPage = page ?? 1; return View(claimants.ToPagedList(notNullPage, 50)); }

¿Hay alguna forma razonable de trabajar con PagedList y async ?

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

¿Hay alguna forma razonable de trabajar con PagedList y async?

Sí. No sale de la caja con EF. Pero puede obtener PagedList.EntityFramework que expone un ToPagedListAsync :

 public class PagedListExtended<T> : BasePagedList<T> { private PagedListExtended() { } public static async Task<IPagedList<T>> Create(IQueryable<T> superset, int pageNumber, int pageSize) { var list = new PagedListExtended<T>(); await list.Init(superset, pageNumber, pageSize); return list; } async Task Init(IQueryable<T> superset, int pageNumber, int pageSize) { if (pageNumber < 1) throw new ArgumentOutOfRangeException("pageNumber", pageNumber, "PageNumber cannot be below 1."); if (pageSize < 1) throw new ArgumentOutOfRangeException("pageSize", pageSize, "PageSize cannot be less than 1."); TotalItemCount = superset == null ? 0 : await superset.CountAsync(); PageSize = pageSize; PageNumber = pageNumber; PageCount = TotalItemCount > 0 ? (int) Math.Ceiling(TotalItemCount/(double) PageSize) : 0; HasPreviousPage = PageNumber > 1; HasNextPage = PageNumber < PageCount; IsFirstPage = PageNumber == 1; IsLastPage = PageNumber >= PageCount; FirstItemOnPage = (PageNumber - 1)*PageSize + 1; var num = FirstItemOnPage + PageSize - 1; LastItemOnPage = num > TotalItemCount ? TotalItemCount : num; if (superset == null || TotalItemCount <= 0) return; Subset.AddRange(pageNumber == 1 ? await superset.Skip(0).Take(pageSize).ToListAsync() : await superset.Skip((pageNumber - 1)*pageSize).Take(pageSize).ToListAsync()); } } public static class PagedListExtendedExtensions { public static async Task<IPagedList<T>> ToPagedListAsync<T>(this IQueryable<T> superset, int pageNumber, int pageSize) { return await PagedListExtended<T>.Create(superset, pageNumber, pageSize); } }
over 4 years ago · Santiago Trujillo Denunciar

0

Sí tu puedes.

Puede usar X.PagedList, que es una versión mejorada de PagedList y admite operaciones asíncronas.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda