2008-10-28 13 views

Respuesta

0

Tengo una cuadrícula de búsqueda en mi Dynamic Data for MVC sample application, pero la cuadrícula está renderizada a mano. Los datos están usando PagedList, que vino de Rob Conery (quien a su vez creo que lo obtuvo de ScottGu).

He estado pensando acerca de lo que un ayudante de la red paginado podría ser similar para MVC ...

+0

Sí Brad, estaba tratando de evitar el uso de algunos de los controles precocidos, ya que pueden tener algunos códigos de formas web en ellos. Lo que necesitamos en los futuros podría ser Html.PageNavigation (...) helper, que requiere una gran cantidad de argumentos ... desde el número de registros, el número total de registros, clases de CSS, etc. o simplemente hasta una PagedList (que también usar extensivamente ... junto con LazyList (asiente con la cabeza a Rob Con). Comencé a escribir un control de página PageNavigation: ViewUserControl que se puede soltar en cualquier lugar de cualquier vista. Tener esto cocido también sería súper hawt. tal vez no –

3

Si va a crear una tabla de datos a partir de datos JSON, Recomiendo encarecidamente el componente DataTable de YUI (Biblioteca de Yahoo UI) (http://developer.yahoo.com/yui/datatable/). Realiza la paginación muy bien y tiene la opción de devolver el conjunto de registros completo para comenzar y luego buscar todo el lado del cliente o devolver un conjunto de paginación del servidor.

Probablemente no se ajuste a su situación, pero pensé que lo mencionaría.

0

Lo que he hecho para paginar hasta ahora es crear un control de buscapersonas, Se necesita una URL de paginación, id de elemento html para actualizar, número de página, tamaño de página y recuento total.

La url paginación es de la forma controlador/acción, donde la acción devuelve una cadena HTML (la página representada de datos)

El localizador anexa una lista de enlaces javascript para las páginas. Estos enlaces llaman a una función ajax basada en jQuery que golpea la url de búsqueda. Cada clic de página reemplaza el contenido actual del elemento html con los resultados de la llamada ajax. Algo como esto:

public string Render() 
{ 
    var buffer = new StringBuilder(1000); 
    buffer.AppendLine(@"<ul class=""datatable_pager"">") 
     .AppendLine("\t<li>Additional Pages:</li>"); 
    int numberOfPages = TotalItemCount % PageSize == 0 ? TotalItemCount/PageSize : TotalItemCount/PageSize + 1; 

    for(int i = 0; i < numberOfPages; i++) 
    { 
     AppendPageLink(buffer, i); 
    } 

    buffer.AppendLine("\t</ul>"); 
    AppendPagingJS(buffer); 

    return buffer.ToString(); 
} 

private void AppendPageLink(StringBuilder buffer, int i) 
{ 
    buffer.Append("\t\t<li><a href=\"") 
    .Append(PagingLink.Replace("$PAGE$", i.ToString())) 
    .Append("\">") 
    .Append(i.ToString()) 
    .Append("</a>") 
    .AppendLine("\t\t</li>"); 
} 


private void AppendPagingJS(StringBuilder buffer) 
{ 
    buffer.AppendLine(@" 
     <script type=""text/javascript""> 
     function page(page, size, updateElement) 
     { 
      $.post('" + PagingUrl + @"', 
       { 
        pageNumber: page, 
        pageSize: size, 
       }, 
       function(response) 
       { 
        $(""#"" + updateElement).html(response); 
       }, 
       ""html"" 
      ); 
     } 
     </script>"); 
} 

Los mensajes de javascript a la url de paginación, por lo que la acción tendrá que luego hacer algo como:

int.TryParse (Request.Params [ "PageNumber"], página cabo) int.TryParse (Request.Params ["pageSize"], out size))

y utiliza los resultados con tus componentes de acceso a datos para tomar la página de datos, renderizarla como html y devolverla.

Espero que ayude, puedo ampliarlo si es necesario.

Cuestiones relacionadas