2017-04-03 1 views
0

Le problème est que j'utilise une liste pour remplir une page HTML, mais je veux mettre en œuvre la pagination. Maintenant, la première page s'affiche sans problème, mais dès que j'appuie sur le bouton de la deuxième page ou sur une autre, je reçois une page vierge comme si rien ne se passait.C# asp.net deuxième page ne montre pas

(je donnerai des morceaux de mon contrôleur provoque le reste est pas vraiment nenecessary)

Controller:

//input is a textfield from the webview which hold the url I want to use 
public ActionResult RequestLinks(FormCollection input, int? page = null) { 
List<string> links; 

//FindLinks will give back a list of links retrieved from an url 
links = FindLinks(input["url"].ToString(), download); 
int pageSize = 25; 
int pageNumber = page ?? 1; 
ViewBag.links = links.ToPagedList(pageNumber, pageSize); 

return View(links.ToPagedList(pageNumber, pageSize)); 
} 

téléavertisseur Html:

@Html.PagedListPager((IPagedList)ViewBag.links, page => Url.Action("RequestLinks", new { page })) 

Si plus d'informations est nécessaire pour explication ou aide n'hésitez pas à demander.

EDIT:

Peut-être qu'il a quelque chose à voir avec les routes, etc?

+0

La fonction ToPagedList serait pertinente. –

+0

@SamAxe Cela fait partie de la bibliothèque PagedList. Il convertit ma liste normale en IEnumerable. – tribeldragon

Répondre

0

Réponse # 1:

Je pense que lorsque vous utilisez Url.Action(..) vous devez fournir le nom de chacun des paramètres de valeur de l'itinéraire que vous passez.

Par exemple:

@Html.PagedListPager((IPagedList)ViewBag.links, pageNumber => Url.Action("RequestLinks", new { page = pageNumber })) 

J'utilise ici pageNumber être le nom de la variable du prédicat, et en nommant explicitement page comme le nom du paramètre de route que je suis mise, en supposant que le choix action est:

public ActionResult RequestLinks(int? page = null) { 
    // ... 
} 

réponse # 2:

Votre action nécessite que l'URL soit toujours passée afin de télécharger les liens et dans votre exemple actuel ce n'est pas le cas. Le FormCollection input n'existera pas lorsque vous suivez un lien, il est seulement là après le POST initial.

Vous devriez être en mesure de changer l'action:

public ActionResult RequestLinks(string url, int? page = null) { 

    // Store it. 
    ViewBag.url = url; 

    // Everything else 
    // ... 

} 

Et à votre avis:

@Html.PagedListPager((IPagedList)ViewBag.links, pageNumber => Url.Action("RequestLinks", new { url = ViewBag.url, page = pageNumber })) 

qui (faire quelques hypothèses) devraient générer des liens comme:

/{controller}/RequestLinks?url=http://google.com&page=3 
+0

Malheureusement, cela ne fonctionne pas pour moi, le résultat est le même. On dirait que vous ajoutez simplement une valeur entre les deux, exactement la même chose que l'autre. – tribeldragon

+0

@tribeldragon Pouvez-vous ajouter la signature de la méthode d'action du contrôleur à votre question? –

+0

J'espère avoir ajouté la bonne chose. – tribeldragon