Saltar al contenido

¿Cómo puedo usar Url.Action con parámetros de lista?

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)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *