Question

Par exemple, comment puis-je exécuter me.test ci-dessous?

myvar = 'test'
me.myvar

ASP recherche la méthode " myvar " et ne le trouve pas. En PHP, je pourrais simplement dire $ myvar- mais ma syntaxe, mais la syntaxe d'ASP ne fait pas la distinction entre les variables et les méthodes. Suggestions?

En rapport avec cela, existe-t-il une fonction method_exists dans ASP Classic?

Merci d'avance!

MODIFIER: j'écris une classe de validation et souhaite appeler une liste de méthodes via une chaîne délimitée par des tubes.

Ainsi, par exemple, pour valider un champ de nom, nous appellerions:

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

J'aime l'idée d'avoir une seule ligne qui montre toutes les manières dont un champ donné est validé. Et chaque section de la chaîne délimitée par un tuyau est le nom d’une méthode.

Si vous avez des suggestions pour une meilleure configuration, je suis tout ouïe!

Était-ce utile?

La solution

Vous pouvez y parvenir dans VBScript à l'aide de la fonction 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")

Enverra "Une chose a été testée" au client.

Voici donc votre exigence de validation à l'aide de 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

Ayant fourni cela, je dois dire cependant que si vous connaissez PHP, alors JScript serait un meilleur choix sur le serveur. En Javascript, vous pouvez appeler une méthode comme celle-ci: -

<*>

Autres conseils

Si vous parlez de VBScript, il n’a pas ce genre de fonctionnalité. (du moins pas à ma connaissance), je pourrais l’essayer comme ceci:

Select myvar
   case "test":
      test

   case "anotherSub":
      anotherSub

   else
      defaultSub

end select

Cela fait un moment que j'ai écrit VBScript (Dieu merci), je ne suis donc pas sûr de la qualité de ma syntaxe.

EDITER - Une autre stratégie

Personnellement, je ferais ce qui précède, pour des raisons de sécurité. Mais si vous ne l'aimez absolument pas, vous pouvez alors essayer d'utiliser différentes langues sur votre page. Dans le passé, j’utilisais à la fois Javascript et VBScript sur mes pages ASP classiques (côté serveur) et pouvais appeler des fonctions déclarées dans l’autre langue à partir de mon langage actuel. Cela me convenait particulièrement lorsque je voulais utiliser quelque chose avec les expressions régulières, mais que j'étais en VBScript.

Vous pouvez essayer quelque chose comme

<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>

Je n'ai pas testé cela dans une page ASP classique, mais je pense que c'est suffisamment proche pour que cela fonctionne avec des ajustements mineurs.

La capacité de PHP à appeler ou à créer des fonctions de manière dynamique est un hack qui conduit à de mauvaises pratiques de programmation. Vous devez expliquer ce que vous essayez d'accomplir (pas comment) et apprendre à coder correctement.

Ce n’est pas parce que vous pouvez faire quelque chose que vous ne faites pas bien ou une bonne idée.

Utilisez la commande "Exécuter". déclaration en ASP / VBScript.

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

ASP ne prend pas en charge la liaison tardive de cette manière. Qu'essayez-vous de faire, dans un sens plus large? Expliquez-le, et quelqu'un pourra vous montrer comment le réaliser en asp.

De plus, vous pouvez envisager "objectiver" " la fonctionnalité de validation. La création de classes est possible (bien que peu utilisée) dans 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
%> 
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top