Cómo obtener el valor de campos de formulario con el mismo nombre

Imaginemos el siguiente código HTML:

<input type="text" name="nombre" /><br />

<input type="text" name="nombre" /><br />

Si desde un servidor ASP.NET, como respuesta a un submit (o postback en webforms), queremos acceder a los valores del campo del formulario “nombre”, podemos utilizar el clásico Request[“nombre”] para obtener los valores de todos ellos separados por comas.

Así, si introducimos en el primer campo el valor “Juan” y en el segundo “Pedro”, Request["nombre"] contendrá “Juan,Pedro”. Esto podría ser suficiente para procesarlo troceando la cadena a partir de las comas, por ejemplo así:

string[] nombres = Request["nombre"].Split(',');

 

string n1 = nombres[0]; // n1 = "Juan"

string n2 = nombres[1]; // n2 = "Pedro"

Sin embargo, es obvio que esta técnica genera problemas si un usuario introduce en alguno de los campos una coma, el carácter que estamos considerando como separador de los elementos.

La forma correcta de hacerlo sería utilizando el método GetValues() sobre la propiedad Form de la petición, la cual nos devuelve un array con los valores de cada campo. Por ejemplo, si en el primer campo introducimos “Juan,Jose” y en el segundo “Luis”, el resultado sería el que sigue:

string[] nombres = Request.Form.GetValues("nombre");

string n1 = nombres[0]; // Juan,Jose

string n2 = nombres[1]; // Luis

 

En ASP.NET MVC, el sistema de bindings es capaz de facilitarnos aún más las cosas. Si en la vista existen diferentes campos llamados “nombre”, y el submit se realiza sobre una acción en cuyos parámetros aparece un array con la misma denominación, recibiremos los datos directamente:

[AcceptVerbs(HttpVerbs.Post)]

public ActionResult Editar(string[] nombre)

{

    // nombre[0] -> "Juan,Jose"

    // nombre[1] -> "Luis"

}

Crossposteando desde: Cómo obtener el valor de campos de formulario con el mismo nombre | Variable not found 

Deja un comentario

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