Pregunta

Supongo que esto no es un trato enorme, ya que hay otro camino alrededor de este tema, pero tengo mucha curiosidad en cuanto a la respuesta, ya que pensé que era posible hacerlo.

Tengo una propiedad pública que devuelve un booleano en mi código detrás. Me gustaría acceder a esta variable del servidor en mi función de validación de JavaScript, pero hasta ahora, no lo consiguiendo.

Public Property editMode() As Boolean
    Get
        If Cache("editMode") IsNot Nothing Then
            Return (DirectCast(Cache("editMode"), Boolean))
        Else
            Return False
        End If
    End Get
    Set(ByVal value As Boolean)
        Cache("editMode") = value
    End Set
End Property

function validateEdit()
{
    alert("editMode value is " + '<%#editMode()%>');
    if ('<%#editMode()%>'.toString() == "True")
    {
        alert("You are currently in edit mode. Please save or cancel changes.");
        return false;
    }
    return true;
}

He intentado un montón de variaciones en esto, pero siempre es falso. En el código actual, la alerta devuelve "EditMode Value es False"

cuando uso:

if ('<%#editMode()%>') ...

Entonces, sigue siendo siempre falso, pero entra en la condición de IF, por lo que el comportamiento es como si siempre fuera cierto.

Otra cosa a mencionar es que la mayoría de las cosas de JavaScript / Server Tag que encuentro, dice que usa <%= editmode%> , pero no puedo hacer esto porque cada vez que uso el= en su lugar de la # i obtenga una excepción:

"La colección de controles no puede ser modificado porque el control contiene bloques de código (es decir, <% ...%>). "

Así que resolví esto usando # y diciendo

    Page.Header.DataBind()
    Page.Form.DataBind()

en la página Cargar el manejador de eventos.

¿Alguna idea? Gracias de antemano. :)

(Además, generalmente uso C #, por lo que, sin saberlo, podría haber hecho algo tonto en la parte de VB, así que siéntase libre de señalarlo también)

¿Fue útil?

Solución 2

Esto me ayudó a arreglar el error. "La colección de controles no se puede modificar porqueEl control contiene bloques de código "

Mover la función JavaScript de la cabeza y en el cuerpo soluciona el problema.Parece ser algunas cosas que podrían causar este problema, pero en mi caso, el culpable más probable es el AJAXTOOLKIT.

Otros consejos

Primero, intente cambiar a esto:

<%=editMode()%>

No estoy seguro de si eso es todo, pero no puede lastimar.En segundo lugar, ¿estás en el modo de edición cuando carga por primera vez la página?Ese código va a ejecutar el lado del servidor y devolver el resultado al usuario.

en la página del usuario, verán:

function validateEdit()
{
    alert("editMode value is " + 'False');
    if ('False'.toString() == "True")
    {
        alert("You are currently in edit mode. Please save or cancel changes.");
        return false;
    }
    return true;
}

de nuevo, no estoy seguro de si eso es, pero es importante entender que Javascript no está haciendo ninguna llamada al servidor.

una cosa más.

Usted se da cuenta de que está convirtiendo una cadena a otra cadena con

'<%#editMode()%>'.toString() 

¿DERECHO?

Creo que lo que quieres es esto

if ('<% =editMode.toString() %>'= 'True')...

o mejor aún

if (<% =editMode.toString().ToLower() %>)...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top