我使用此擴展名創建RouteUrl
,並附加當前查詢字符串。這適用於沒有相同密鑰兩次或更多的查詢字符串。帶查詢字符串的RouteUrl - 帶有重複鍵
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'設置,表單提交結果在'?id = 1&id = 2&id = 3' – janhartmann
試試這個:QueryString.AllKeys.InvalidateCachedArrays() – SpookyBookie
你有更多的信息做? – janhartmann