2010-09-06 39 views
6

我有以下形式,ASP:request.form没有返回值?

<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> 

但是,当我试图让我的ASP文件contact_us.asp这些后变量的值,然后返回空白。代码如下:

<%@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") 

%> 

它只返回“OK”给我。 Message变量中什么都没有?

请帮我,告诉我这里有什么问题?

+0

?在上面的HTML中没有''(或者'email')。 – bobince 2010-09-06 08:05:34

+0

当我从HTML 标记中删除'enctype =“multipart/form-data”'时,它的工作正常并返回值。 – Prashant 2010-09-06 09:22:05

+1

如果您不需要进行文件上传,您可以删除enctype =“multipart/form-data” – Cris 2010-09-06 09:28:05

回答

18

经典ASP不支持multipart/form-data。这是一个令人惊讶的基本缺陷,即使对于一个语言ASP的可敬的年龄,但你会做什么,转移到ASP.NET? (是的,哦,那么没关系吧。)

如果你没有做文件上传,最简单的就是坚持使用默认的enctype(这是application/x-www-form-urlencoded)。 multipart/form-data的唯一好处是你可以把文件上传。 (理论上,它也将有一个可以明确指定字符编码的优势。但是,没有浏览器实际上是这样做的。)

如果确实需要在传统的ASP处理multipart/form-data你需要自己解析传入请求体,将它分解为字段和值。或者更确切地说,使用现有的库来完成它*。

该库通常会为读取上传的文件和其他表单值提供单独的界面。这完全取代了经典ASP Request.Form界面的使用。具体到哪里你可以找到它取决于你选择的图书馆。这确实意味着如果你想要一个可以同时响应enctype的表单,你必须检查这个类型并使用两个不同接口中的一个。

*:有负载。 forexample。我没有认可这两者之一......他们都没有真正按照标准解析多部分,并且都对文件名安全性似乎有点松懈(从不在用户提交的文件名下存储文件!安全灾难! )。但这似乎是ASP上传脚本课程的标准。至少,不像许多人,他们不会为他们要钱。

0

不要使用enctype="multipart/form-data"

从代码删除,看看它是否工作。 form-data enctype用于上传数据,例如图像文件。如果使用enctype,则需要稍微不同地访问表单元素。

如果您正在上传数据,那么您正在使用的ASP对象(例如ASP Upload)将具有访问表单域的功能。 Request.form("")不会工作。

访问表单值将沿着线:

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

您将需要阅读的对象文件。

2

我通过从Request.Form("SomeInputTagId")method="post"正常工作的表单标记中完全删除enctype(默认为application/x-www-form-urlencoded)发现。我也不需要安装任何第三方阅读器。希望这可以帮助。