Question

J'ai une grille avec les informations de contact que je dois pouvoir consulter.

Toute la plomberie est déjà en place , avec un dernier détail. La pagination est effectuée via un simple paramètre p Querystring, par exemple. www.myurl.com/grid?p=3 serait la troisième page; le référentiel récupère automatiquement les bonnes données, ainsi que le nombre total d'éléments. La taille de chaque page est définie ailleurs et je n'ai pas besoin de m'en soucier dans la chaîne de requête.

Cependant, je suis favorable à la recherche, etc. Le terme de recherche recherché est noté q dans ma chaîne de requête. Je peux donc maintenant avoir une combinaison: www.myurl.com/grid?q=tom&p=2 qui recherche "tom". et tire la deuxième page de résultats.

Le problème auquel je suis confronté maintenant, étant donné que les q (ou autres) paramètres peuvent être présents dans la chaîne de requête, comment puis-je créer un pageur pour cela (qui devrait conserver les paramètres d'origine, donc si je clique sur "page 2", il faut passer de

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

    à

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

Comment puis-je faire cela?

Était-ce utile?

La solution

J'ai posé une question similaire hier. Peut-être que vous voulez vérifier Préserver les données dans .net mvc

Le code ci-dessous est extrait du livre de 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();
    }
}

Autres conseils

Par conséquent, vous devez faire en sorte que les liens de votre page dirigent l'utilisateur vers la même URL, mais avec une "page" " différente. valeur. Pour ce faire, la méthode la plus évidente consiste à faire en sorte que votre code qui rend un lien de page récupère la chaîne de requête de la requête en cours, modifie la " page " valeur et restituer un lien à l'aide de la chaîne modifiée.

Sinon, et c’est l’approche que j’ai choisie, vous pouvez définir un nouvel itinéraire pour votre "liste". pages, y compris les valeurs de pagination et de tri. De cette façon, ils font partie de l'URL mais sont également très faciles à gérer dans votre contrôleur.

Un exemple incluant les valeurs de tri et de pagination pourrait ressembler à ceci:

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}" });

Évidemment, votre " liste " La méthode d'action doit pouvoir interpréter les valeurs et gérer les données en conséquence. Ce n'est peut-être pas ce que vous cherchez vraiment, mais je pensais juste que je le lancerais là-bas.

ASIDE: j'ai également écrit un attribut de filtre d'action [Liste] qui sélectionne ces valeurs dans la route et (si le modèle est une collection) applique automatiquement le tri et la pagination dans OnActionExecuted. De cette manière, tout ce que je dois faire est de récupérer les données et de définir le modèle.

Je conserve les valeurs de recherche pour chaque formulaire de la session. Dans les méthodes qui répondent à la recherche ou à la pagination, je charge d’abord les valeurs de la session, puis les substitue (et définit les valeurs de la session, si nécessaire) avec des valeurs issues de la chaîne de requête ou des paramètres de formulaire, selon qu’il s’agit d’un get ou d’un post. . De cette façon, je n'ai pas à m'inquiéter du code de radiomessagerie, y compris des critères de recherche - il utilise simplement ce qui est déjà stocké. Si je souhaite effectuer une nouvelle recherche, les valeurs des champs de recherche changent et la recherche est effectuée à l'aide d'un bouton de filtrage, commençant par les résultats de la page 1.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top