Saltar al contenido

¿Cómo acepto un array como un parámetro de acción del controlador ASP.NET MVC?

Bienvenido a nuestro sitio web, en este sitio vas a hallar la solucíon a lo que buscabas.

Solución:

El enlazador de modelos predeterminado espera esta URL:

http://localhost:54119/Designs/Multiple?ids=24041&ids=24117

para enlazar con éxito a:

public ActionResult Multiple(int[] ids)

    ...

Y si desea que esto funcione con valores separados por comas, puede escribir un archivador de modelo personalizado:

public class IntArrayModelBinder : DefaultModelBinder

    public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    

y luego podría aplicar este modelo de carpeta a un argumento de acción en particular:

public ActionResult Multiple([ModelBinder(typeof(IntArrayModelBinder))] int[] ids)

    ...

o aplicarlo globalmente a todos los enteros array parámetros en su Application_Start en Global.asax:

ModelBinders.Binders.Add(typeof(int[]), new IntArrayModelBinder());

y ahora la acción de su controlador podría verse así:

public ActionResult Multiple(int[] ids)

    ...

Para ampliar la respuesta de Darin Dimitrov, algo con lo que puede salirse con la suya es aceptar un simple string en su parámetro de URL y convertirlo en un array tú mismo:

public ActionResult Multiple(string ids)
  int[] idsArray = ids.Split(',').Select(int.Parse).ToArray();
  /* ...process results... */

Si obtiene un error de análisis al hacer esto (porque alguien le pasó un array), puede hacer que su controlador de excepciones devuelva un 400 Bad Request error en lugar del predeterminado, más hostil 404 Not Found error que MVC devuelve cuando no se encuentra un punto final.

También puede usar este formato de URL y ASP.NET MVC hará todo por usted. Pero recuerde aplicar la codificación de URL.

?param1[0]=3344¶m1[1]=2222

Si para ti ha sido útil este post, sería de mucha ayuda si lo compartes con más juniors y nos ayudes a dar difusión a este contenido.

¡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 *