Question

Je suppose que ce n'est pas un accord énorme, car il y a une autre solution autour de cette question, mais je suis vraiment curieux quant à la réponse, car je pensais que cela était possible de faire.

J'ai une propriété publique qui retourne un booléen dans mon code derrière. J'aimerais accéder à cette variable de serveur dans ma fonction de validation JavaScript, mais jusqu'à présent, pas tout à fait de l'obtenir.

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

J'ai essayé un tas de variations à ce sujet, mais c'est toujours faux. Dans le code actuel, l'alerte renvoie "la valeur d'édition est false"

Quand j'utilise:

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

Ensuite, il est toujours toujours faux, mais il passe dans la condition de si, le comportement est donc comme s'il était toujours vrai.

Une autre chose à mentionner est que la plupart des trucs de balises JavaScript / serveur que je trouve indique d'utiliser <%= EdiDmode%> , mais je ne peux pas faire cela parce que chaque fois que j'utilise le=. du # Je reçois une exception:

"La collection de contrôles ne peut pas être modifié parce que le contrôle contient blocs de code (c'est-à-dire <% ...%>). "

Alors j'ai résolu cela en utilisant # et en disant

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

dans la page Charger le gestionnaire d'événements.

Des idées? Merci en avance. :)

(aussi, j'utilise habituellement C #, donc j'avais peut-être inconnue quelque chose de goofy dans la partie VB, alors n'hésitez pas à souligner cela aussi)

Était-ce utile?

La solution 2

Cela m'a aidé à corriger l'erreur. "La collection Controls ne peut pas être modifiée carLa commande contient des blocs de code "

Déplacement de la fonction JavaScript hors de la tête et dans le corps fixe le problème.Semble être quelques choses qui pourraient causer cette question, mais dans mon cas, le coupable le plus probable est l'AjaxToolkit.

Autres conseils

Tout d'abord, essayez de changer de ceci:

<%=editMode()%>

Je ne sais pas si c'est ça, mais ça ne peut pas faire mal.Deuxièmement, êtes-vous en mode édition lorsque vous chargez d'abord la page?Ce code va exécuter le côté du serveur et renvoie le résultat à l'utilisateur.

sur la page de l'utilisateur, ils verront:

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

Encore une fois, je ne sais pas si c'est le cas, mais il est important de comprendre que JavaScript ne apporte aucun appels sur le serveur.

une dernière chose.

Vous vous rendez compte que vous convertissez une chaîne en une autre chaîne avec

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

Droite?

Je pense que ce que vous voulez, c'est ce

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

ou mieux encore

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top