【问题标题】:ASP: request.form is not returning value?ASP:request.form 没有返回值?
【发布时间】:2010-09-06 07:46:36
【问题描述】:

我有以下表格,

<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 中获取这些 post 变量的值时,它会返回空白。代码如下:

<%@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 变量中没有任何内容?

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

【问题讨论】:

  • ?上述 HTML 中没有 &lt;input name="message"/&gt;(或 email)。
  • 当我从 HTML 标记中删除 enctype="multipart/form-data" 时,它工作正常并返回值。
  • 如果您不需要上传文件,您可以删除 enctype="multipart/form-data"
  • 你有提交按钮吗?或者展示你如何强制使用 POST 方法?
  • 是的,它有一个“提交”HTML 按钮。我已将其添加到问题中的代码中。请检查!

标签: asp-classic vbscript


【解决方案1】:

经典 ASP 不提供对使用 `multipart/form-data.即使对于 ASP 古老的语言来说,这也是一个令人惊讶的基本缺陷,但是您将如何解决它,迁移到 ASP.NET? (是吗?哦。那没关系。)

如果您不进行文件上传,最简单的方法就是坚持使用默认的enctype(即application/x-www-form-urlencoded)。 multipart/form-data 的唯一优点是您可以将文件上传放入其中。 (理论上,它还有一个优点是您可以明确指定字符编码。但实际上没有浏览器这样做。)

如果您确实需要在 Classic ASP 中处理 multipart/form-data,您将需要自己解析传入的请求正文,将其拆分为字段和值。或者更常见的是,使用现有的库来执行此操作*。

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

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

【讨论】:

  • 它确实支持它,但你必须读取原始字节数据 - Request.BinaryRead()
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

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

    访问表单值的方式如下:

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

    您需要阅读对象文档。

    【讨论】:

      猜你喜欢
      • 2017-12-17
      • 2016-12-12
      • 2017-02-28
      • 2013-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-03
      相关资源
      最近更新 更多