2009-03-13 5 views
0

Dans mon C# code-behind pour une application ASP.Net, j'ai une variable en train d'être définie et ensuite je veux définir une variable Javascript pour que je puisse travailler avec le client. Cette variable C# est définie dans un gestionnaire d'événements et elle change assez souvent assez souvent.Pourquoi cette variable javascript que je crée via C# n'est mise à jour qu'une seule fois?

Donc, mon gestionnaire d'événements ne fait que ça ...

int scale = (int)myObject.Scale; 
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "JSVariables", "scale=" + scale, true); 

Puis-je dans mon JS je le gestionnaire d'événements d'alerte simplement la valeur.

alert(scale); 

Le problème est que la valeur de l'échelle n'est définie que la toute première fois que l'événement est déclenché. Je peux parcourir mon code C# chaque fois que l'événement est levé et voir que le RegisterClientScriptBlock est appelé et que cette échelle obtient en fait des valeurs différentes.

Comment est-ce que cette valeur n'est pas constante? Chaque fois que la ligne RegisterClientScriptBlock est atteinte, une nouvelle valeur doit être chargée dans ma variable d'échelle JS, mais elle reste telle qu'elle était initialement. Des idées?

Répondre

2

RegisterClientScriptBlock enregistre votre script par type (this.GetType()) et la clé ("JSVariables"). La prochaine fois que RegisterClientScriptBlock est appelé dans la même pile d'exécution, il vérifie si un script pour ce type et cette clé a déjà été enregistré, et si c'est le cas, il ne fera rien.

L'objectif est d'éliminer les scripts partagés en double. Si cinq de vos contrôles reposent tous sur un JavaScript partagé, vous ne souhaitez l'inclure qu'une seule fois sur la page. Ainsi, tous les contrôles peuvent appeler la même fonction et la même clé, et s'assurer qu'elle n'est pas incluse plusieurs fois.

1

En plus de ce que Rex a dit, si vous utilisez ASP.NET Ajax, vous devrez utiliser les méthodes RegisterClientScript sur le ScriptManager si vous voulez mettre à jour ces valeurs entre les postbacks partiels, ce qui semble être le cas Faire.

Questions connexes