Dopo che un modulo è stato inviato, come si controlla un lato server se esiste un campo particolare? Per esempio:Come verificare se esiste un campo inviato POST in VBScript?
If [Exists] Request("FieldName") Then
...
End If
Dopo che un modulo è stato inviato, come si controlla un lato server se esiste un campo particolare? Per esempio:Come verificare se esiste un campo inviato POST in VBScript?
If [Exists] Request("FieldName") Then
...
End If
Verificare se non è vuoto. Ci sono alcuni modi diversi, ma quello che ho visto usato più frequentemente è lungo le linee di:
If Request("FieldName") <> "" Then
'etc.
End If
Io di solito controllare in modo esplicito le collezioni Form
e QueryString
con qualche variazione di uno dei il codice qui sotto se io può essere sempre la variabile da uno o l'altro a seconda del contesto:
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
o un nidificato Se ... Allora:
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
Se so esattamente da quale collezione proviene, controllerò specificatamente quella raccolta. Il motivo è che voglio assicurarmi che stia tirando quello che mi aspetto da dove mi aspetto che provenga. Non voglio che qualcuno sostituisca un valore Form
inviando qualcosa nello QueryString
quando non me lo aspetto.
Da MSDN:
Se la variabile specificata non si trova in una delle precedenti cinque collezioni, l'oggetto Request restituisce VUOTO.
Tutte le variabili sono accessibili direttamente chiamando Request (variabile) senza il nome della raccolta.In questo caso, il server Web cerca le collezioni nel seguente ordine:
- QueryString
- Modulo
- Cookies
- ClientCertificate
- ServerVariables
Se una variabile con la lo stesso nome esiste in più di una raccolta, l'oggetto Request restituisce il fi per prima cosa che l'oggetto incontri .
Si consiglia di fare riferimento ai membri di una collezione utilizzando il nome completo. Ad esempio, anziché la richiesta ("AUTH_USER") utilizza Request.ServerVariables ("AUTH_USER"). Questo consente al server di individuare l'oggetto più rapidamente.
If Request("FieldName").Count > 0 Then
...
End If
Oppure, in breve:
If Request("FieldName").Count Then
...
End If
Background:
Request
è magia, in quanto non genera un errore quando si tenta di accedere a una chiave che non faceva parte della richiesta, ma lo .Count
sarà 0 per le chiavi non esistenti.foo&bar&baz
foo=value1&foo=value2
.Pertanto, il modo affidabile per determinare se un tasto è stato inviato dal client è quello di contare quante volte il cliente ha inviato.
Un caso speciale di questo test è la verifica della presenza di un valore non vuoto per tale chiave (If Request("FieldName") > ""
). Questo può o non può essere ciò che vuoi alla fine; solo essere consapevoli del fatto che il comportamento sottostante delle stringhe di query è più ampio di quello.
+1. Questo è il metodo che dovrebbe essere usato. –
Di solito controllo il valore del pulsante SUBMIT. Se è stato fatto clic, il suo valore viene registrato insieme ai dati del modulo. Pertanto, anche se tutti i dati del modulo sono vuoti, il valore del pulsante di invio non sarà. E se il valore del pulsante di invio è vuoto, non è stato fatto clic.
if request("btn_Submit") <> "" Then
response.write "form was submitted"
end if
Questo è più difficile se si utilizza una chiamata form.submit javascript(), nel qual caso di solito optare per il campo nascosto.
Per controllare se il parametro era presente (senza preoccuparsi suo valore) è anche possibile scrivere:
fieldValue = Request("FieldName")
if Not IsEmpty(fieldValue) ...
Un vantaggio rispetto metodo Count sopra è che è possibile verificare la variabile, senza fare riferimento al il nome del campo di nuovo. Il vantaggio rispetto al test per "" è che se si passa & NomeCampo senza assegnare valore, il test per "" restituisce true, ma IsEmpty restituisce false.
Modifica: risulta che questo non è affidabile in IIS.
JFTR: 'Else If' (notare lo spazio) sarebbe un condizionale nidificato. 'ElseIf' non lo è. –
@AnsgarWiechers sì ... il mio intento originale era quello di andare con un vero nidificato se, ma mi sono distratto da un collega. : P – AnonJr
Il campo potrebbe esistere, ma il valore potrebbe essere vuoto. Il metodo corretto è il seguente di Tomalak. – bvmobileapps