【发布时间】:2013-08-07 18:09:59
【问题描述】:
提交表单后,如何检查服务器端是否存在特定字段?例如:
If [Exists] Request("FieldName") Then
...
End If
【问题讨论】:
标签: asp-classic vbscript
提交表单后,如何检查服务器端是否存在特定字段?例如:
If [Exists] Request("FieldName") Then
...
End If
【问题讨论】:
标签: asp-classic vbscript
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") > "")。这最终可能是也可能不是您想要的;请注意,查询字符串的基本行为比这更广泛。
【讨论】:
要检查参数是否存在(不关心它的值),也可以这样写:
fieldValue = Request("FieldName")
if Not IsEmpty(fieldValue) ...
与上面的 Count 方法相比,一个优点是您可以测试变量,而无需再次引用字段名称。 测试 "" 的优势在于,如果您通过 &FieldName 而不分配值,则测试 "" 将产生 true,但 IsEmpty 返回 false。
编辑:事实证明这在 IIS 中不可靠。
【讨论】:
检查是否为空。有几种不同的方法,但我见过更常用的一种是:
If Request("FieldName") <> "" Then
'etc.
End If
如果我可能会根据上下文从一个或另一个中获取变量,我通常会使用以下代码之一的一些变体来明确检查 Form 和 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
如果我确切知道它来自哪个集合,我会专门检查那个集合。原因是我想确保它从我期望它来自的地方拉出我期望的东西。我不希望有人在我没想到的时候通过在QueryString 中发送一些东西来覆盖Form 值。
来自MSDN:
如果指定的变量不在前五个之一中 集合,Request 对象返回 EMPTY。
所有变量都可以通过调用Request(variable)直接访问 没有集合名称。在这种情况下,Web 服务器搜索 按以下顺序收集:
- 查询字符串
- 表格
- Cookie
- 客户证书
- 服务器变量
如果同名变量存在于多个集合中, Request 对象返回该对象的第一个实例 相遇。
强烈建议在提及成员时 集合全名被使用。例如,而不是 Request.("AUTH_USER") 使用 Request.ServerVariables("AUTH_USER")。这个 允许服务器更快地定位到该项目。
【讨论】:
Else If(注意空格)将是一个嵌套条件。 ElseIf 不是。
我通常检查提交按钮的值。如果单击它,它的值将与表单数据一起发布。因此,即使您所有的表单数据都是空白的,提交按钮的值也不会是。如果提交按钮的值为空,那么它没有被点击。
if request("btn_Submit") <> "" Then
response.write "form was submitted"
end if
如果您使用 javascript form.submit() 调用,这会更加困难,在这种情况下,我通常会选择隐藏字段。
【讨论】: