\$\begingroup\$
\$\endgroup\$
2
Can this code be improved? I'm avoiding using the QueryString collection because the query string may contain eg: OrderBy=Column1&OrderBy=Column2
and it didn't seem helpful to start with those switched into QueryString["OrderBy"]=="Column1,Column2";
var query = "";
if (urlHelper.RequestContext.HttpContext.Request.Url != null)
{
query = urlHelper.RequestContext.HttpContext.Request.Url.Query.TrimStart('?');
if (query.Length > 0)
{
var kvp =
query.Split('&').Select(x => x.Split('='))
.Select(x => new { Key = x[0], Value = (x.Length > 0) ? x[1] : ""})
.Where(x => x.Key != "page")
.ToList();
kvp.Add(new { Key = "page", Value = number.ToString() });
query = String.Join("&", kvp.Select(x => x.Key + "=" + x.Value).ToArray());
}
else query = String.Format("page={0}", number);
}
1 Answer 1
\$\begingroup\$
\$\endgroup\$
I think that yes this code can be improved.
use a regular expression:
var newQuery = Regex.Replace(currentQuery, @"(?i)(page=\d*&?)", "").TrimEnd('&');
if (newQuery.Length > 0)
newQuery += string.Format("&Page={0}", currentPageNo);
else
newQuery = string.Format("Page={0}", currentPageNo);
answered Jun 17, 2011 at 15:46
lang-cs
QueryString["OrderBy"]=="Column1,Column2"
. It seems to be more regular structure than several parameters with the same name. \$\endgroup\$