提交表单后,如果存在特定字段,如何检查服务器端?例如:
If [Exists] Request("FieldName") Then
...
End If
答案 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
如果我根据上下文从一个或另一个获取变量,我通常会明确检查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
如果我确切知道它来自哪个系列,我将专门检查该系列。原因是我想确保它从我期望它来自的地方拉出我期望的东西。我不希望有人在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中不可靠。