如何检查VBScript中是否存在POST提交字段?

时间:2013-08-07 18:10:00

标签: asp-classic vbscript

提交表单后,如果存在特定字段,如何检查服务器端?例如:

If [Exists] Request("FieldName") Then
    ...
End If

4 个答案:

答案 0 :(得分:19)

If Request("FieldName").Count > 0 Then
    ...
End If

或简称:

If Request("FieldName").Count Then
    ...
End If

背景:

  • Request集合是神奇的,因为当您尝试访问不属于请求的密钥时它不会引发错误 - 但.Count对于非{0}将为0 - 现有钥匙。
  • 在网址编码的查询字符串中,发送没有值的密钥是合法的,例如foo&bar&baz
  • 多次发送相同的密钥也是合法的,即每个密钥有多个值,例如foo=value1&foo=value2

因此,确定客户端是否已发送密钥的可靠方法是计算客户端发送密钥的次数。

此测试的一个特例是检查该键是否存在非空值(If Request("FieldName") > "")。这可能是你想要的,也可能不是你想要的;请注意,查询字符串的基本行为比这更广泛。

答案 1 :(得分:12)

检查它是否为空。有几种不同的方式,但我经常看到的方法是:

If Request("FieldName") <> "" Then
 'etc.
End If

如果我根据上下文从一个或另一个获取变量,我通常会明确检查FormQueryString集合中某个代码的变体:

Select Case True
    Case Request.Form("FieldName") <> ""
        'Run if the Form isn't empty
    Case Request.QueryString("FieldName") <> ""
        'Run if the QueryString isn't empty
    Case Else
        'Set a predefined default if they're both empty
End Select

或嵌套If ... Then:

If Request.Form("FieldName") <> "" Then
    'Run if the Form isn't empty
ElseIf Request.QueryString("FieldName") <> "" Then
    'Run if the QueryString isn't empty
Else
    'Set a predefined default if they're both empty
End If

如果我确切知道它来自哪个系列,我将专门检查该系列。原因是我想确保它从我期望它来自的地方拉出我期望的东西。我不希望有人在Form发送一些我不期待的内容时覆盖QueryString值。

来自MSDN

  

如果指定的变量不在前五个之一中   集合,Request对象返回EMPTY。

     

所有变量都可以通过调用Request(变量)直接访问   没有集合名称。在这种情况下,Web服务器搜索   按以下顺序收集:

     
      
  • QueryString
  •   
  • 表格
  •   
  • 缓存
  •   
  • ClientCertificate
  •   
  • ServerVariables
  •   
     

如果多个集合中存在具有相同名称的变量,   Request对象返回该对象的第一个实例   遭遇。

     

强烈建议在提及a的成员时   集合使用全名。例如,而不是   请求。(“AUTH_USER”)使用Request.ServerVariables(“AUTH_USER”)。这个   允许服务器更快地找到项目。

答案 2 :(得分:0)

我通常会检查SUBMIT按钮的值。如果单击它,它的值将与表单数据一起发布。因此,即使您的所有表单数据都是空白,提交按钮的值也不会是。如果提交按钮的值为空,则表示未单击。

if request("btn_Submit") <> "" Then
    response.write "form was submitted"
end if

如果您使用的是javascript form.submit()调用,则会更加困难,在这种情况下,我通常会选择隐藏字段。

答案 3 :(得分:0)

要检查参数是否存在(不关心其值),也可以写:

fieldValue = Request("FieldName")
if Not IsEmpty(fieldValue) ...

上述Count方法的一个优点是,您可以测试变量,而无需再次引用字段名称。 优于测试&#34;&#34;如果您在没有赋值的情况下传递&amp; FieldName,请测试&#34;&#34;将产生true,但IsEmpty返回false。

编辑:原来这在IIS中不可靠。

  1. 对于单独使用?param或?param =&amp; param2的网址,IsEmpty(param)返回false,但
  2. 对于带有?param&amp; param2的网址,IsEmpty(param)奇怪地返回true ...