2010-05-05 15 views
16

¿Cuál es la forma estándar de pasar y procesar una matriz en una solicitud HTTP en .NET? Tengo una solución, pero no sé si es el mejor enfoque.Pasar valores de matriz en una solicitud HTTP en .NET

aquí está mi solución:

<form action="myhandler.ashx" method="post"> 
    <input type="checkbox" name="user" value="Aaron" /> 
    <input type="checkbox" name="user" value="Bobby" /> 
    <input type="checkbox" name="user" value="Jimmy" /> 
    <input type="checkbox" name="user" value="Kelly" /> 
    <input type="checkbox" name="user" value="Simon" /> 
    <input type="checkbox" name="user" value="TJ" /> 

    <input type="submit" value="Submit" /> 
</form> 

El manejador ASHX recibe el parámetro "usuario" como una cadena delimitada por comas. Usted puede obtener los valores fácilmente mediante la división de la cadena:

public void ProcessRequest(HttpContext context) 
    { 
     string[] users = context.Request.Form["user"].Split(','); 
    } 

Por lo tanto, ya tienen una respuesta a mi problema: asignar varios valores a la misma el nombre del parámetro, asumir el manejador ASHX lo recibe como una cadena delimitada por comas y divide la cuerda. Mi pregunta es si esto es lo que normalmente se hace en .NET.

¿Cuál es la práctica estándar para esto? ¿Hay una manera más simple de capturar los valores múltiples que asumir que el valor está delimitado por comas y llamar a Split() en él? ¿Es así como las matrices se pasan normalmente en .NET o se usa XML en su lugar?

¿Alguien tiene alguna idea de si este es el mejor enfoque?

Respuesta

32

No hay realmente un estándar, pero lo que está utilizando es lo más cercano.

Sin embargo, los valores son realmente no enviados como una cadena separada por comas, se envían como valores separados con el mismo nombre. Los datos de la forma de su ejemplo se vería así:

user=Aaron&user=Bobby&user=Jimmy&user=Kelly&user=Simon&user=TJ 

Puede leer los valores como una matriz directamente como esto:

string[] users = context.Request.Form.GetValues("user"); 

Si utiliza Form["user"] que concatena los valores para usted y usted tener que dividirlos de nuevo. Esto es solo una pérdida de tiempo, y también se rompe si alguno de los valores contiene una coma.

+0

Gracias, esta es exactamente la información que estaba buscando. Así que .NET Framework es lo suficientemente inteligente como para leer valores de parámetros HTTP del mismo nombre que una matriz, y tengo la opción de obtenerlo como una matriz a través de GetValues ​​() o como una cadena delimitada por comas a través de la indexación. –

+0

Gracias. Eso es muy útil. Obtuve la lista . –

2

Si usa casillas de verificación o un cuadro de lista de selección múltiple, lo que obtiene automáticamente de html es un conjunto de valores separados por comas. Lo que estás haciendo está perfectamente bien. Si genera una matriz en su javascript de alguna otra manera, puede generar una cadena separada por comas y asignarla a un campo oculto, y usar split() en el servidor de la misma manera. XML es sin duda otra opción, pero parece complejo para mí si todo lo que quiere hacer es pasar una simple serie de números o cadenas cortas. (Por supuesto, si los valores de cadena que necesita para pasar contienen comas, esto arruinaría su plan simple.)

+2

No, no obtiene valores separados por comas del formulario html. Es la colección 'Request.Form' que concatena los valores si los solicita como un valor único. – Guffa

+0

Sí, tienes razón, por supuesto. Gracias por la aclaración. Me refería a la forma en que normalmente se accede a estos valores en asp.net y no explicaba la transformación que el marco hace por nosotros. – Ray

+0

Gracias por la sugerencia. –

Cuestiones relacionadas