7

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

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

4 回答 4

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

或者,简而言之:

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

背景:

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

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

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

于 2013-08-07T19:54:17.907 回答
13

检查它是否为空。有几种不同的方法,但我见过更常用的一种是:

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

如果我可能会根据上下文从一个或另一个中获取变量,我通常会使用以下代码之一的一些变体显式检查Formand集合:QueryString

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(variable) 直接访问,无需集合名称。在这种情况下,Web 服务器按以下顺序搜索集合:

  • 请求参数
  • 形式
  • 饼干
  • 客户证书
  • 服务器变量

如果同名变量存在于多个集合中,则 Request 对象返回该对象遇到的第一个实例。

强烈建议在引用集合成员时使用全名。例如,使用 Request.ServerVariables("AUTH_USER") 而不是 Request.("AUTH_USER")。这允许服务器更快地定位项目。

于 2013-08-07T19:56:06.400 回答
1

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

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

与上述 Count 方法相比的一个优点是,您可以测试变量,而无需再次引用字段名称。测试 "" 的优势在于,如果您通过 &FieldName 而不分配值,则测试 "" 将产生 true,但 IsEmpty 返回 false。

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

  1. 对于单独带有 ?param 或 ?param=¶m2 的 url,IsEmpty(param) 返回 false,但是
  2. 对于带有 ?param¶m2 的 url,IsEmpty(param) 奇怪地返回 true ...
于 2016-01-14T11:08:35.437 回答
0

我通常检查提交按钮的值。如果单击它,它的值将与表单数据一起发布。所以,即使你所有的表单数据都是空白的,提交按钮的值也不会是。如果提交按钮的值为空,那么它没有被点击。

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

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

于 2013-12-31T20:14:35.813 回答