Solución:
En lugar de utilizar un tipo anónimo, cree un RouteValueDictionary
. Formatee los parámetros como parameter[index]
.
@{
var categories = new List<int>() { 6, 7 };
var parameters = new RouteValueDictionary();
for (int i = 0; i < categories.Count; ++i)
{
parameters.Add("category[" + i + "]", categories[i]);
}
}
Luego,
@Url.Action("Test", parameters)
Cree la cadena de consulta usted mismo, es evidente que UrlHelper no se diseñó para este caso de uso.
Utilizando:
static class QueryStringBuilder {
public static string ToQueryString(this NameValueCollection qs) {
return ToQueryString(qs, includeDelimiter: false);
}
public static string ToQueryString(this NameValueCollection qs, bool includeDelimiter) {
var sb = new StringBuilder();
for (int i = 0; i < qs.AllKeys.Length; i++) {
string key = qs.AllKeys[i];
string[] values = qs.GetValues(key);
if (values != null) {
for (int j = 0; j < values.Length; j++) {
if (sb.Length > 0)
sb.Append('&');
sb.Append(HttpUtility.UrlEncode(key))
.Append('=')
.Append(HttpUtility.UrlEncode(values[j]));
}
}
}
if (includeDelimiter && sb.Length > 0)
sb.Insert(0, '?');
return sb.ToString();
}
}
Puedes escribir esto:
var parameters = new NameValueCollection {
{ "category", "1" },
{ "category", "2" }
};
var url = Url.Action("Search") + parameters.ToQueryString(includeDelimiter: true);
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)