Domanda

Ho una griglia con le informazioni di contatto che devo poter sfogliare.

Tutto l'impianto idraulico è già in atto , con un ultimo dettaglio. Il paging avviene tramite un semplice parametro p Querystring, ad es. www.myurl.com/grid?p=3 sarebbe la terza pagina; il repository recupera automaticamente i dati corretti e anche il conteggio totale degli elementi. La dimensione di ogni pagina è definita da qualche altra parte e non devo preoccuparmene nella stringa di query.

Tuttavia, sostengo anche la ricerca, ecc. Il termine cercato cercato è indicato con q nella mia Querystring. Quindi ora posso avere una combinazione: www.myurl.com/grid?q=tom&p=2 che cerca " tom " e tira la seconda pagina di risultati.

Il problema che sto affrontando ora, poiché i parametri q (o altri) potrebbero essere presenti nella stringa della query, come posso creare un cercapersone per questo (che dovrebbe mantenere i parametri originali, quindi se faccio clic su " pagina 2 " deve andare da

  • www.myurl.com/grid?a=1&b=xyz&q=tom

    a

  • www.myurl.com/grid?a=1&b=xyz&q=tom&p=2

Come posso farlo?

È stato utile?

Soluzione

Ho fatto una domanda simile ieri. Forse vuoi dare un'occhiata Conserva i dati in .net mvc

di seguito è riportato il codice copiato dal libro di Steve Sanderson

public static class PagingHelpers
{
    public static string PageLinks(this HtmlHelper html, int currentPage,
    int totalPages, Func<int, string> pageUrl)
    {
        StringBuilder result = new StringBuilder();
        for (int i = 1; i <= totalPages; i++)
        {
            TagBuilder tag = new TagBuilder("a"); // Construct an <a> tag

            tag.MergeAttribute("href", pageUrl(i));
            tag.InnerHtml = i.ToString();
            if (i == currentPage)
                tag.AddCssClass("selected");


            result.AppendLine(tag.ToString());
        }
        return result.ToString();
    }
}

Altri suggerimenti

Quindi devi fare in modo che i tuoi collegamenti di pagina indirizzino l'utente allo stesso URL ma con una "pagina" diversa valore. Il modo più ovvio per farlo è fare in modo che il tuo codice che esegua il rendering di un collegamento di pagina afferri la stringa di query dalla richiesta corrente, modifichi la " page " valore e renderizza un collegamento usando la stringa modificata.

In alternativa, e questo è l'approccio che ho adottato, puoi definire un nuovo percorso per il tuo " list " pagine, che includono qualsiasi valore di paginazione e ordinamento. In questo modo fanno parte dell'URL ma sono anche molto facili da gestire nel controller.

Un esempio che include valori di ordinamento e paging potrebbe essere simile al seguente:

routes.MapRoute(
    "List",
    "{controller}/List/{pageNumber}/{sortBy}/{sortOrder}/{pageSize}",
    new { action = "List", sortBy = "Id", sortOrder = "Asc", pageNumber = 1, pageSize = 10 },
    new { sortBy = @"[A-Za-z0-9+-]*", sortOrder = "Asc|Desc", pageNumber = @"\d{1,6}", pageSize = @"\d{1,6}" });

Ovviamente la tua " lista " il metodo di azione deve essere in grado di interpretare i valori e gestire i dati di conseguenza. Questo potrebbe non essere quello che stai cercando, ma ho pensato di buttarlo lì.

A PARTIRE: Ho anche scritto un attributo del filtro azione [Elenco] che raccoglie questi valori dalla rotta e (se il modello è una raccolta) applica automaticamente l'ordinamento e il paging in OnActionExecuted. In questo modo, tutto ciò che devo fare è recuperare i dati e impostare il modello.

Persisto i valori di ricerca per ogni modulo nella sessione. Nei metodi che rispondono alla ricerca o al paging, prima carico tutti i valori della sessione, quindi li sostituisco (e imposto i valori della sessione, se necessario) con i valori della stringa di query o dei parametri del modulo, a seconda che si tratti di get o post . In questo modo non devo preoccuparmi del codice di paging, inclusi i criteri di ricerca: utilizza semplicemente ciò che è già memorizzato. Se voglio fare una nuova ricerca, i valori nelle caselle di ricerca cambiano e la ricerca viene eseguita utilizzando un pulsante di filtro - che inizia con i risultati della pagina 1.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top