2010-04-05 6 views
6

Tengo una sección de un formulario que debo manejar de forma diferente al resto de los resultados del formulario. En la sección que necesita manejo especial, necesito iterar sobre 3 campos de formulario que tienen el mismo nombre. Tienen que tener el mismo nombre, no puedo cambiarlo. La sección de la forma Me refiero a ve algo como esto:Uso de C# para iterar los campos del formulario con el mismo nombre

<td><input name="Color" size="20" value="" type="text"></td> 
<td><input name="Color" size="20" value="" type="text"></td> 
<td><input name="Color" size="20" value="" type="text"></td> 

Utilizando C# Me probar algo como esto:

trato de manejarlo como esto:

int i; 

for (i = 1; i <= Request.Form["Color"][i]; i++) 
{ 
    colorName.Text += Request.Form["Color"]; 
} 

que conduce con la siguiente excepción:

System.NullReferenceException: Object reference not set to an instance of an object.

Cómo ¿Debería manejar campos de formulario con el mismo nombre?

Respuesta

-1

O Request.Form ["Color"] es nulo, o colorName no se encuentra en la página aspx. No puedo decir cuál según tu código. De lo contrario, parece correcto. ¿Qué tipo de elemento html es "Color"? Si solo se trata de un elemento html, asegúrese de tener los atributos id y name en él.

+1

A menos que esté haciendo secuencias de comandos del lado del cliente, las identificaciones no son necesarias. – pdwetz

+0

No es por eso que falla. 'i <= Request.Form [" Color "] [i]' simplemente está mal (int <= char, porque Request.Form [...] es una cadena). La pregunta tiene el código HTML (al menos ahora y tres minutos antes de que tu respuesta obtuviera publicadores). – PhistucK

0

Sugiero agregar cada formulario a una lista y usar el operador ForEach en su lugar, aunque es un poco más largo que lo que ya está tratando de hacer.

p. Ej.

private List<Request.Form> newList = new List<Request.Form>(); 

newList.Add(FormName1); 
newList.Add(FormName2); 
newList.Add(FormName3); 

foreach(Request.Form form in newList) 
{ 
    //perform logic 
} 

Nota: Asumo que Request.Form es el nombre de clase para el Formulario en sí.

No he probado esto por mí mismo, por lo que podría haber algunos errores, espero que ayude de alguna manera.

0

Es importante recordar que los valores de formulario publicados no son más que una colección de nombre/valor, donde el valor es una cadena simple. Por lo tanto, no tiene mucho sentido tener múltiples campos de formulario con el mismo nombre. Ni siquiera sé si realmente está permitido.

Pero como dices, no puedes cambiar eso. Realicé una prueba rápida en IE y Chrome, y al menos en estos navegadores, parece que envían múltiples campos de formulario con el mismo nombre que una cadena separada por comas. Es posible que desee probar un poco más para asegurarse de que este comportamiento sea coherente en todos los navegadores.

Con esto en mente, usted podría decir:

string colorValues = Request.Form["Color"]; 
string [] colors = colorValues.Split(','); 

Cada elemento de la matriz colores corresponde ahora al valor de cada elemento de entrada que fue publicada.

11

No necesita hacer ninguna división u otra magia especial; simplemente puede obtener una matriz de cadenas de ASP.NET:

cadena [] values ​​= Request.Form.GetValues ​​("Color");

+4

Y no olvide hacer una comprobación nula antes de usar "valores" :) – pdwetz

Cuestiones relacionadas