Le modèle de SearchResults.aspx
est une instance de PersonSearch
; lorsque la demande d'une nouvelle page arrive (une demande GET), la méthode d'action doit la prendre et calculer les nouveaux résultats.
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult SearchResults(PersonSearch search, int? page)
{
ViewData["Results"] = new PaginatedList<Person>(_searchService.FindPersons(search), page ?? 0, 1);
return View("SearchResults", search);
}
Ensuite, je dois générer les liens précédents/suivants:
<%= Html.ActionLink("Next Page >", "SearchResults", routeValues) %>
Si j'utilise routeValues = ViewData.Model
Je peux voir les propriétés de l'objet passées l'adresse, mais je ne peux pas ajouter le paramètre "page".
Il pense qu'il serait préférable de créer un autre objet avec les valeurs correctes, au lieu d'utiliser (et potentiellement de modifier les valeurs de routage actuelles):
<%=Html.ActionLink("Next Page >", "SearchResults", new {
search = this.Model,
page = 1 //or whatever
}) %>
Ce billet de blog de Scott Guthrie m'a aidé à comprendre ce qu'est le routage d'URL: ASP.NET MVC Framework (Partie 2): routage d'URL
J'adore qu'il ait inclus des cas de test!
Vous devez remplacer ToString ().
Si vous utilisez Razor (je me rends compte que OP a demandé il y a quatre ans avant que Razor ne soit inventé, mais les gens qui le trouvent l'utilisent peut-être).
J'ai pu faire fonctionner quelque chose en utilisant une méthode @helper en ligne.
@helper RunnerLink(PersonSearch model, int page)
{
var routeParms =new RouteValueDictionary(model.GetType().GetProperties().ToDictionary(p => p.Name, p => p.GetValue(model, null)));
routeParms.Add("page", page.ToString());
routeParms.Add("Controller", "Property");
@Html.ActionLink("Search", "Index", routeParms)
}
L'utilisation serait simple -
@RunnerLink(myPersonSearchInstance, 1)
Ce n'est pas la solution la plus élégante, mais elle fonctionne bien si vous souhaitez passer un objet en tant que routeValue, mais vous devez passer des éléments supplémentaires, tels que Controller
, Area
ou dans Cas OP page
.
Vous devez utiliser RouteLink à la place d'ActionLink. Votre code devrait ressembler à ceci
@Html.RouteLink("Next", new {controller = "SearchResults", action = "Index", search=samevalue, page=1 })