提交表单后,如何检查服务器端是否存在特定字段?例如:
If [Exists] Request("FieldName") Then
...
End If
If Request("FieldName").Count > 0 Then
...
End If
或者,简而言之:
If Request("FieldName").Count Then
...
End If
背景:
Request
集合很神奇,因为当您尝试访问不属于请求的密钥时它不会引发错误 - 但.Count
对于不存在的密钥,它将为 0。foo&bar&baz
foo=value1&foo=value2
.因此,确定密钥是否已被客户端发送的可靠方法是计算客户端发送了多少次。
If Request("FieldName") > ""
此测试的一个特殊情况是检查该键 ( )是否存在非空值。这最终可能是也可能不是您想要的;请注意,查询字符串的基本行为比这更广泛。
检查它是否为空。有几种不同的方法,但我见过更常用的一种是:
If Request("FieldName") <> "" Then
'etc.
End If
如果我可能会根据上下文从一个或另一个中获取变量,我通常会使用以下代码之一的一些变体显式检查Form
and集合: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")。这允许服务器更快地定位项目。
要检查参数是否存在(不关心其值),也可以编写:
fieldValue = Request("FieldName")
if Not IsEmpty(fieldValue) ...
与上述 Count 方法相比的一个优点是,您可以测试变量,而无需再次引用字段名称。测试 "" 的优势在于,如果您通过 &FieldName 而不分配值,则测试 "" 将产生 true,但 IsEmpty 返回 false。
编辑:原来这在 IIS 中不可靠。
我通常检查提交按钮的值。如果单击它,它的值将与表单数据一起发布。所以,即使你所有的表单数据都是空白的,提交按钮的值也不会是。如果提交按钮的值为空,那么它没有被点击。
if request("btn_Submit") <> "" Then
response.write "form was submitted"
end if
如果您使用 javascript form.submit() 调用,这会更加困难,在这种情况下,我通常会选择隐藏字段。