The Model of SearchResults.aspx
is an instance of PersonSearch
; when the request for a new page arrive (a GET request), the action method should take i
If you are using Razor (I realize OP asked four years ago before Razor was invented, but people finding this maybe using it).
I was able to get something working by using an inline @helper method.
@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)
}
Usage would be simple --
@RunnerLink(myPersonSearchInstance, 1)
It isn't the most elegant solution, but it works well if you want to pass an object in as a routeValue, but you need to pass additional items, such as Controller
, Area
or in OPs case page
.
It think it would be better to create another object with the correct values, instead of using (and potentially altering the current routevalues):
<%=Html.ActionLink("Next Page >", "SearchResults", new {
search = this.Model,
page = 1 //or whatever
}) %>
You need to override ToString().
You need use RouteLink instead ActionLink. Your code should look something like this
@Html.RouteLink("Next", new {controller = "SearchResults", action = "Index", search=samevalue, page=1 })
This blog post by Scott Guthrie helped me wrap my head around URL Routing: ASP.NET MVC Framework (Part 2): URL Routing
I love that he included test cases!