Domanda

Ad esempio, come posso eseguire me.test di seguito?

myvar = 'test'
me.myvar

ASP cerca il metodo " myvar " e non lo trova. In PHP potrei semplicemente dire $ me- > $ myvar ma la sintassi di ASP non distingue tra variabili e metodi. Suggerimenti?

Strettamente correlato a questo, esiste una funzione method_exists in ASP Classic?

Grazie in anticipo!

EDIT: sto scrivendo una classe di convalida e vorrei chiamare un elenco di metodi tramite una stringa delimitata da pipe.

Ad esempio, per convalidare un campo nome, chiamerei:

validate("required|min_length(3)|max_length(100)|alphanumeric")

Mi piace l'idea di avere una sola riga che mostri tutti i modi in cui un determinato campo viene convalidato. E ogni sezione delimitata da pipe della stringa è il nome di un metodo.

Se hai suggerimenti per una migliore configurazione, sono tutto orecchi!

È stato utile?

Soluzione

Puoi farlo in VBScript usando la funzione GetRef : -

Function Test(val)
  Test = val & " has been tested"
End Function

Dim myvar : myvar = "Test"
Dim x : Set x = GetRef(myvar)
Response.Write x("Thing")

Invierà " La cosa è stata testata " al cliente.

Quindi ecco il tuo requisito valido usando GetRef: -

validate("Hello World", "min_length(3)|max_length(10)|alphanumeric")


Function required(val)
    required = val <> Empty
End Function


Function min_length(val, params)
    min_length = Len(val) >= CInt(params(0))
End Function


Function max_length(val, params)
    max_length = Len(val) <= CInt(params(0))
End Function


Function alphanumeric(val)
    Dim rgx : Set rgx = New RegExp
    rgx.Pattern = "^[A-Za-z0-9]+
function test(val) { return val + " has been tested"; )
var myvar = "test"
Response.Write(this[myvar]("Thing"))
quot; alphanumeric = rgx.Test(val) End Function Function validate(val, criterion) Dim arrCriterion : arrCriterion = Split(criterion, "|") Dim criteria validate = True For Each criteria in arrCriterion Dim paramListPos : paramListPos = InStr(criteria, "(") If paramListPos = 0 Then validate = GetRef(criteria)(val) Else Dim paramList paramList = Split(Mid(criteria, paramListPos + 1, Len(criteria) - paramListPos - 1), ",") criteria = Left(criteria, paramListPos - 1) validate = GetRef(criteria)(val, paramList) End If If Not validate Then Exit For Next End Function

Detto questo, devo dire che se hai familiarità con PHP, JScript sarebbe una scelta migliore sul server. In Javascript puoi chiamare un metodo come questo: -

<*>

Altri suggerimenti

Se stai parlando di VBScript, non ha quel tipo di funzionalità. (almeno non a mia conoscenza) Potrei provarlo in questo modo:

Select myvar
   case "test":
      test

   case "anotherSub":
      anotherSub

   else
      defaultSub

end select

È da un po 'che non scrivo VBScript (grazie a dio), quindi non sono sicuro di quanto sia buona la mia sintassi.

EDIT-Un'altra strategia

Personalmente, farei quanto sopra, per motivi di sicurezza. Ma se non ti piace assolutamente, potresti provare a usare lingue diverse sulla tua pagina. In passato ho usato sia Javascript che VBScript sulle mie pagine ASP classiche (entrambi lato server) e sono stato in grado di chiamare le funzioni dichiarate nell'altra lingua dalla mia lingua corrente. Ciò è stato particolarmente utile quando volevo fare qualcosa con le espressioni regolari, ma era in VBScript.

Puoi provare qualcosa del genere

<script language="vbscript" runat="server">
    MyJavascriptEval myvar
</script>
<script language="javascript" runat="server">
    function MyJavascriptEval( myExpression)
    {
        eval(myExpression);
    }

    /* OR
    function MyJavascriptEval( myExpression)
    {
        var f = new Function(myExpression);
        f();
    }
    */
</script>

Non l'ho provato in una classica pagina ASP, ma penso che sia abbastanza vicino da funzionare con piccole modifiche.

La capacità di PHP di chiamare o creare dinamicamente funzioni sono hack che portano a pratiche di programmazione scadenti. Devi spiegare cosa stai cercando di realizzare (non come) e imparare il modo corretto di codificare.

Solo perché puoi fare qualcosa, non farlo nel modo giusto o una buona idea.

Utilizza " Esegui " istruzione in ASP / VBScript.

Execute "Response.Write ""hello world"""

ASP non supporta l'associazione tardiva in questo modo. Cosa stai cercando di fare, in senso lato? Spiegalo e qualcuno può mostrarti come realizzarlo in asp.

Inoltre, potresti considerare " oggettivare " la funzionalità di validazione. Creare classi è possibile (anche se non ampiamente utilizzato) in VB Script.

<%
Class User
' declare private class variable
Private m_userName

' declare the property
Public Property Get UserName
  UserName = m_userName
End Property
Public Property Let UserName (strUserName)
  m_userName = strUserName
End Property

' declare and define the method
Sub DisplayUserName
  Response.Write UserName
End Sub

End Class
%> 
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top