Variables côté serveur en JavaScript
-
15-09-2020 - |
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
"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)
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() %>)...