I'm using the MVCContrib grid to output some data. When I sort a column, I get a url which may look like this:
/?Column=ColumnName&Direction=Ascending
Lets say I want to add links to control how many results are being shown. Spontaneously I would write something like this:
Html.ActionLink("View 10", "Index", new { pageSize = 10 })
... which would give me:
/?PageSize=10
But say I already sorted the grid. In that case I want to save the url parameters, making the new url look something like this:
/?Column=ColumnName&Direction=Ascending&PageSize=10
How can accomplish this?
You could include those other parameters when generating the link:
Html.ActionLink(
"View 10",
"Index",
new {
Column = Request["Column"],
Direction = Request["Direction"],
pageSize = 10
}
)
or write a custom html helper which will automatically include all current query string parameters and append the pageSize
parameter:
Html.PaginateLink("View 10", 10)
and here's how the helper could look like:
public static class HtmlExtensions
{
public static MvcHtmlString PaginateLink(
this HtmlHelper helper,
string linkText,
int pageSize
)
{
var query = helper.ViewContext.HttpContext.Request.QueryString;
var values = query.AllKeys.ToDictionary(key => key, key => (object)query[key]);
values["pageSize"] = pageSize;
var routeValues = new RouteValueDictionary(values);
return helper.ActionLink(linkText, "Index", routeValues);
}
}
You can also use solution from question ASP.NET MVC: The right way to propagate query parameter through all ActionLinks. It will allow you to preserve any parameters on any routes you like.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With