2010-09-06 11 views
6

He siguiente formulario,ASP: request.form no devuelve valor?

<form action="contact_us.asp" method="post" enctype="multipart/form-data" name="form1" id="form1"> 
    <input name="firstname" type="text" id="firstname" size="30" /> 
    <input name="lastname" type="text" id="lastname" size="30" /> 
    <input type="submit" name="submit" id="submit" value="Submit" /> 
</form> 

Pero cuando estoy tratando de obtener el valor de estas variables de correos en mi archivo ASP contact_us.asp entonces se vuelve blanco. El código está a continuación:

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<title>Untitled Document</title> 
</head> 
<% 

Dim FirstName, LastName, Email, Message 
FirstName = request.form("firstname") 
LastName = request.form("lastname") 

response.write(FirstName & "OK") 

%> 

Está regresando solo "OK" para mí. nada en la variable de mensaje?

Por favor, ayúdame y dime qué pasa aquí?

+0

? no hay '' (o 'email' para el caso) en el HTML anterior. – bobince

+0

Cuando elimino 'enctype =" multipart/form-data "' de la etiqueta HTML , funciona bien y devuelve valor. – Prashant

+1

Si no necesita realizar cargas de archivos, puede eliminar enctype = "multipart/form-data" – Cris

Respuesta

18

ASP clásico no es compatible con multipart/form-data. Esta es una deficiencia sorprendentemente básica incluso para un lenguaje de venerable edad de ASP, pero ¿qué vas a hacer al respecto, pasar a ASP.NET? (Sí, bueno, no importa luego).

Si no está cargando archivos, es más fácil simplemente mantener el predeterminado enctype (que es application/x-www-form-urlencoded). La única ventaja de multipart/form-data es que puede colocar cargas de archivos en ella. (Teóricamente, también tendría la ventaja de que puede especificar codificaciones de caracteres definitivamente. Pero ningún navegador realmente lo hace.)

Si necesita manejar multipart/form-data en ASP clásico, tendrá que analizar el cuerpo de la solicitud entrante usted mismo, dividiéndolo en campos y valores. O más bien, más típicamente, use una biblioteca existente para hacerlo *.

Esa biblioteca generalmente proporcionará interfaces separadas para leer los archivos cargados y los otros valores de formulario. Esto reemplaza completamente el uso de la interfaz Classic ASP Request.Form. Exactamente donde puede encontrarlo depende de la biblioteca que elija. Esto significa que si desea tener un formulario que pueda responder a enctype igualmente, debe verificar el tipo y usar una de las dos interfaces diferentes.

*: Hay muchas cargas. forexample. No estoy respaldando ninguno de estos como tal ... ninguno de los dos analizan correctamente las partes múltiples según el estándar y ambos parecen ser poco estrictos con respecto a la seguridad del nombre de archivo (nunca almacena un archivo bajo el nombre del archivo ¡desastre de seguridad!) Pero eso parece ser el par del curso para los scripts de carga de ASP. Al menos, a diferencia de muchos, no les están pidiendo dinero.

0

No utilice enctype="multipart/form-data"

Retire que desde el código y ver si funciona. El form-data enctype se usa para cargar datos, por ejemplo, archivos de imágenes. Necesita acceder a los elementos del formulario de forma ligeramente diferente si usa ese enctype.

Si está cargando datos, el objeto ASP que está utilizando (por ejemplo ASP Upload) tendrá funciones para acceder a los campos del formulario. Request.form("") no funcionará.

acceder a los valores de la forma serían lo largo de las líneas de:

Set yourUploadComponent = CreateObject("Your.UploadComponentClassString") 
sFormValue = yourUploadComponent.Form.Item("txtName").Value 

Usted tendrá que leer la documentación de objetos.

2

encontré eliminando por completo enctype (que por defecto es application/x-www-form-urlencoded) de la etiqueta de formulario que Request.Form("SomeInputTagId") funcionó bien con method="post". Tampoco necesité instalar ningún lector externo. Espero que esto ayude.

Cuestiones relacionadas