2009-06-22 23 views
6

Tengo una vista que toma una lista paginada (como en la muestra de Cena de nerds). La página funciona según lo previsto. Ahora he agregado una vista parcial que toma la misma PaginatedList y llamo RnederPartial dentro de la primera vista. ASP.NET arroja una excepción que no puedo resolver.Lista de tipos personalizados de ASP.NET MVC en vista parcial

Código PaginatedList:

public class PaginatedList<T> : List<T> 
{ 
    public int PageIndex { get; private set; } 
    public int PageSize { get; private set; } 
    public int TotalCount { get; private set; } 
    public int TotalPages { get; private set; } 

    public PaginatedList(IQueryable<T> source, int pageIndex, int pageSize) 
    { 
     PageIndex = pageIndex; 
     PageSize = pageSize; 
     TotalCount = source.Count(); 
     TotalPages = (int)Math.Ceiling(TotalCount/(double)PageSize); 
     this.AddRange(source.Skip(PageIndex * PageSize).Take(PageSize)); 
    } 

    public bool HasPreviousPage 
    { 
     get 
     { 
      return (PageIndex > 0); 
     } 
    } 

    public bool HasNextPage 
    { 
     get 
     { 
      return (PageIndex + 1 < TotalPages); 
     } 
    } 
} 

controlador:

[Authorize] 
public ActionResult Index(int? page) 
{ 
    const int pageSize = 10; 

    var workstations = itilRepository.FindAllWorkstations(); 

    var paginatedWorkstations = new PaginatedList<Workstation>(workstations, page ?? 0, pageSize); 

    return View("Index", paginatedWorkstations); 
} 

cabeza del índice de Vista:

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<ITILDatabase.Helpers.PaginatedList<ITILDatabase.Models.Workstation>>" %> 

que llame a la vista parcial de la vista del índice de la siguiente manera:

<% Html.RenderPartial("Workstations", Model); %> 

superior de Estaciones de Trabajo Vista parcial:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewPage<ITILDatabase.Helpers.PaginatedList<ITILDatabase.Models.Workstation>>" %> 

El error que recibo es:

c: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ Temporary ASP.NET Files \ root \ d2889d23 \ c6192b3e \ App_Web_workstations.ascx.a8d08dba.tgrd74s0.0.cs (156): CS0030 de error: no se puede convertir tipo 'ASP.views_home_workstations_ascx' a 'System.Web.Mvc.ViewUserControl'

Si alguien sabe por qué estoy recibiendo este error lo agradecería mucho

¡Gracias!

+0

Sólo quería decir que no es una buena idea para robar el código PaginatedList 1: 1. Exige que todos los elementos se obtengan de la base de datos. –

Respuesta

23

las estaciones de trabajo la parte superior de la vista parcial debe verse como:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<ITILDatabase.Helpers.PaginatedList<ITILDatabase.Models.Workstation>>" %> 

Cambio ViewPage a ViewUserControl

+0

Me di cuenta de esto, pero no podía recordar cómo debería ser. ^^ –

+0

¡Gracias, no puedo creer que no haya visto eso! – Lukasz

+0

Thx, el mismo problema para mí, VS creó el control como System.Web.Mvc.ViewPage no ViewUserControl. –

Cuestiones relacionadas