Я использую это расширение для создания RouteUrl
с добавленной к нему текущей строкой запроса. Это отлично подходит для строк запросов, которые не имеют одного и того же ключа два или более.RouteUrl с querystring - с дублирующимися ключами
public static string CurrentQueryStringRouteUrl(this UrlHelper url, string routeName, RouteValueDictionary routeValues)
{
var context = url.RequestContext;
var combinedRouteValues = new RouteValueDictionary();
var queryString = context.HttpContext.Request.QueryString;
foreach (var key in queryString.AllKeys.Where(key => key != null))
{
combinedRouteValues[key] = queryString[key];
}
if (routeValues != null)
{
foreach (var routeValue in routeValues)
{
combinedRouteValues[routeValue.Key] = routeValue.Value;
}
}
return url.RouteUrl(routeName, combinedRouteValues);
}
Когда есть клавиши строки запроса с таким же именем, например. ?id=1&id=2&id=3
, он преобразуется в ?id=1,2,3
с использованием вышеописанного метода. Есть ли способ избежать этого? Я хочу сохранить исходную строку запроса, поскольку я привязываю эти значения в списке моделей.
Я знаю, что я могу создать настраиваемое связующее устройство для привязки строки, разделенной запятой, к string[]
(или int[]
в этом примере), но я хочу избежать этого, пока не будет консистенции.
Я просто не понимаю, почему формы POST и GET значения не объединяются в виде разделенных запятыми строк. Если у меня есть элемент 'select', с множеством' multiple', форма submit result в '? Id = 1 & id = 2 & id = 3' – janhartmann
Попробуйте следующее: QueryString.AllKeys.InvalidateCachedArrays() – SpookyBookie
У вас есть дополнительная информация о том, что это будет делать? – janhartmann