ASP: request.form не возвращает значение? - PullRequest
7 голосов
/ 06 сентября 2010

У меня есть следующая форма,

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

%>

Он возвращает мне только «ОК».ничего в переменной Message?

Пожалуйста, помогите мне и скажите, что здесь не так?

Ответы [ 3 ]

21 голосов
/ 07 сентября 2010

Классический ASP не поддерживает multipart/form-data.Это удивительно основной недостаток даже для языка почтенного возраста ASP, но что вы собираетесь с этим делать, перейдя на ASP.NET?(Да? Да ладно, не обращайте внимания.)

Если вы не загружаете файлы, проще всего придерживаться значения по умолчанию enctype (то есть application/x-www-form-urlencoded).Единственное преимущество multipart/form-data заключается в том, что вы можете помещать в него файлы.(Теоретически, было бы также иметь преимущество в том, что вы можете указывать кодировки символов окончательно. Но ни один браузер на самом деле не делает этого.)

Если вам нужно обработать multipart/form-data в Classic ASP, вам нужно будет проанализировать входящиезапросить тело самостоятельно, разбив его на поля и значения.Или, скорее, как правило, используйте для этого существующую библиотеку *.

Эта библиотека обычно предоставляет отдельные интерфейсы для чтения загруженных файлов и других значений формы.Это полностью заменяет использование интерфейса Classic ASP Request.Form.Точно, где вы можете найти это, зависит от библиотеки, которую вы выбираете.Это означает, что если вы хотите иметь форму, которая может одинаково реагировать либо на enctype, вы должны проверить тип и использовать один из двух различных интерфейсов.

*: Есть нагрузки. для пример .Я не одобряю ни один из них как таковой ... ни один из них на самом деле не выполняет синтаксический анализ частей в соответствии со стандартом, и оба выглядят немного небрежно в отношении безопасности имени файла ( никогда не хранит файл под именем, предоставленным пользователем! Бедствие безопасности!).Но это похоже на курс для сценариев загрузки ASP.По крайней мере, в отличие от многих, они не просят за них денег.

2 голосов
/ 21 ноября 2012

Я обнаружил, полностью удалив enctype (по умолчанию application/x-www-form-urlencoded) из тега формы, чтобы Request.Form("SomeInputTagId") нормально работал с method="post". Мне также не нужно было устанавливать какие-либо сторонние читатели. Надеюсь, это поможет.

0 голосов
/ 06 сентября 2010

Не использовать enctype="multipart/form-data"

Удалите это из кода и посмотрите, работает ли оно. form-data enctype используется для загрузки данных, например файлов изображений. Вам нужно получить доступ к элементам формы немного по-другому, если вы используете это enctype.

Если вы загружаете данные, то используемый вами объект ASP (например, ASP Upload) будет иметь функции для доступа к полям формы. Request.form("") не будет работать.

Доступ к значениям формы будет выглядеть следующим образом:

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

Вам нужно будет прочитать документацию по объектам.

...