Pregunta

Por ejemplo, ¿cómo puedo ejecutar me.test a continuación?

myvar = 'test'
me.myvar

ASP busca el método "myvar" y no lo encuentra En PHP, simplemente podría decir $ me- > $ myvar pero la sintaxis de ASP no distingue entre variables y métodos. ¿Sugerencias?

Estrechamente relacionado con esto, ¿hay una función method_exists en ASP Classic?

¡Gracias de antemano!

EDITAR: estoy escribiendo una clase de validación y me gustaría llamar a una lista de métodos a través de una cadena delimitada por tuberías.

Entonces, por ejemplo, para validar un campo de nombre, llamaría:

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

Me gusta la idea de tener una sola línea que muestre todas las formas en que se valida un campo determinado. Y cada sección delimitada por tubería de la cadena es el nombre de un método.

Si tiene sugerencias para una mejor configuración, ¡soy todo oídos!

¿Fue útil?

Solución

Puede lograr esto en VBScript utilizando la función 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")

Enviará "La cosa ha sido probada" al cliente.

Entonces, aquí está su requisito de validación 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

Después de proporcionar esto, debo decir que si está familiarizado con PHP, entonces JScript sería una mejor opción en el servidor. En Javascript puede llamar a un método como este: -

<*>

Otros consejos

Si está hablando de VBScript, no tiene ese tipo de funcionalidad. (al menos no que yo sepa) Podría intentarlo así:

Select myvar
   case "test":
      test

   case "anotherSub":
      anotherSub

   else
      defaultSub

end select

Ha pasado un tiempo desde que escribí VBScript (gracias a Dios), así que no estoy seguro de cuán buena es mi sintaxis.

EDITAR: otra estrategia

Personalmente, haría lo anterior, por razones de seguridad. Pero si absolutamente no le gusta, entonces puede intentar usar diferentes idiomas en su página. En el pasado, utilicé Javascript Y VBScript en mis páginas ASP clásicas (tanto en el lado del servidor) como pude llamar a las funciones declaradas en el otro idioma desde mi idioma actual. Esto fue especialmente útil cuando quería hacer algo con expresiones regulares, pero estaba en VBScript.

Puedes probar algo como

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

No probé esto en una página ASP clásica, pero creo que está lo suficientemente cerca como para funcionar con pequeños ajustes.

La capacidad de PHP para llamar dinámicamente o crear funciones son hacks que conducen a malas prácticas de programación. Debe explicar lo que está tratando de lograr (no cómo) y aprender la forma correcta de codificar.

El hecho de que pueda hacer algo, no lo hace correcto o es una buena idea.

Utilice el " Ejecutar " declaración en ASP / VBScript.

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

ASP no admite el enlace tardío de esta manera. ¿Qué estás tratando de hacer, en un sentido más amplio? Explique eso, y alguien puede mostrarle cómo lograrlo en asp.

Además, puede considerar "objetivar" La funcionalidad de validación. Hacer clases es posible (aunque no se usa ampliamente) en 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
%> 
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top