2013-08-07 20 views

risposta

12

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.

+0

JFTR: 'Else If' (notare lo spazio) sarebbe un condizionale nidificato. 'ElseIf' non lo è. –

+0

@AnsgarWiechers sì ... il mio intento originale era quello di andare con un vero nidificato se, ma mi sono distratto da un collega. : P – AnonJr

+2

Il campo potrebbe esistere, ma il valore potrebbe essere vuoto. Il metodo corretto è il seguente di Tomalak. – bvmobileapps

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

Oppure, in breve:

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

Background:

  • La collezione 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.
  • In una stringa di query con codifica URL è legale per inviare le chiavi che non hanno un valore, come foo&bar&baz
  • E 'anche legale di inviare lo stesso tasto più volte, vale a dire più valori per tasto, come 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.

+6

+1. Questo è il metodo che dovrebbe essere usato. –

0

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.

0

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.

  1. per l'URL con? Param da solo, o? Param = & param2, IsEmpty (param) restituisce false, ma
  2. per l'URL con? Param & param2, IsEmpty (param) restituisce stranamente vero ..