Hacer referencia a las casillas de verificación no verificadas con vbscript causa un error

Me encuentro con un problema con mi código vbscript. Mi código HTML se ve así

   

Esto se hace porque arriba hay otra checkbox que llama a una función de javascript que marcará o desmarcará todas las casillas de verificación “DisplayRow”. La función javascript usa getElementsByName para devolver todas las casillas de verificación llamadas “DisplayRow”.

Cuando se hace clic en el botón de envío del formulario, la acción lo envía a una página ASP (ASP clásica) que toma todos los objetos en el formulario de llamada utilizando el comando Request.Form. El comando Request.Form examina el atributo “nombre”, no el atributo “id” del objeto.

Esto parece estar funcionando bien para todos los demás objetos de formulario. Cuando llega a las casillas de verificación porque el atributo “nombre” usa el mismo nombre para todas las casillas, devuelve una matriz. Se puede acceder a las casillas de verificación individuales de esta manera:

 Request.Form("DisplayRow")(x) 

Donde x hace referencia a la checkbox individual en la matriz.

Si las casillas de verificación están marcadas, puedo recorrer la matriz sin problemas. Si 1 o más o todas las casillas de verificación están desmarcadas, cuando el código hace referencia a la primera checkbox de la matriz que está desmarcada, la página se bloquea. No se ejecuta nada después de que falla el comando Request.Form.

He intentado adjuntar el Request.Form (“DisplayRow”) (x) en una función IsNull en una statement If, pero aún así toma el progtwig hacia abajo.

¿Alguien más se encontró con esto y encontró un trabajo?


Editar

Por alguna razón, stackoverflow no me deja agregar más de un comentario.

@Cory. Gracias por la información

@ jwatts1980. El recuento funciona pero no me permite saber cuáles de las casillas de verificación están marcadas. Si el recuento es mayor que 0, puedo recorrerlos, pero si el primero está desmarcado, estoy de vuelta donde comencé con una página accidentada.

No puede hacerlo de esta manera porque las casillas no marcadas no se enviarán en la publicación, solo las marcadas.

Me acercaría a esto de manera diferente:

Primero, agregaría un atributo de value a las casillas de verificación, así:

    

Tenga en cuenta que el valor es el mismo que el índice, esto será necesario en el código.

A continuación, usaría .Split() para juntar las casillas de verificación seleccionadas en una matriz, ya que los valores aparecerán como una cadena separada por comas, es decir: 1,2,3 a su valor .Form() .

 Rows = Request.Form("DisplayRow") 'check if any are selected first If Rows <> "" Then 'make an array with each value selected aRows = Split(Rows,",") 'loop through your array and do what you want For i = lBound(aRows) to uBound(aRows) Response.Write "DisplayRow" & aRows(i) & " was Selected." Next End If 

De esta forma, solo procesa los resultados de la selección e ignora los demás.

Siempre he encontrado esto esencial para mi biblioteca …

 'GetPostData ' Obtains the specified data item from the previous form get or post. 'Usage: ' thisData = GetPostData("itemName", "Alternative Value") 'Parameters: ' dataItem (string) - The data item name that is required. ' nullValue (variant) - What should be returned if there is no value. 'Description: ' This function will obtain the form data irrespective of type (ie whether it's a post or a get). 'Revision info: ' v0.1.2 - Inherent bug caused empty values not to be recognised. ' v0.1.1 - Converted the dataItem to a string just in case. function GetPostData(dataItem, nullVal) dim rV 'Check the form object to see if it contains any data... if request.Form = "" then if request.QueryString = "" then rV = nullVal else if request.QueryString(CStr(dataItem))="" then rV = CStr(nullVal) else rV = request.QueryString(CStr(dataItem)) end if end if else if request.Form(CStr(dataItem)) = "" then rV = CStr(nullVal) else rV = request.Form(CStr(dataItem)) end if end if 'Return the value... GetPostData = rV end function 

Para utilizar la función, simplemente pase el formulario o el elemento de cadena de consulta que está buscando y qué reemplazar los valores vacíos con …

 Dim x x = GetPostData("chkFirstOne", false) 

Puede continuar usando su código existente agregando una sola condición:

 If Request.Form("DisplayRow").Count > 0 Then 'your code here Else 'consider adding message saying nothing was selected End If