Comment puis-je donner des variables variables JavaScript à partir de variables ASP.NET?

J'ai créé une API SCORM pour notre LMS et, en ce moment, j'utilise les variables HardID codées et les variables didactiques (variables qui font référence à la base de données). J'ai besoin de passer l'ID utilisateur et l'ID de cours réels plutôt que d'utiliser des codes codés. Je sais que l'ID utilisateur est stocké dans la session et que l'ID du cours passe de la page de lancement.

Comment puis-je les activer en JavaScript afin que je puisse les inclure dans mes appels au .ashx qui gère les appels SCORM?

Probablement meilleur Les plus faciles à les exposer en tant que propriétés de votre page (ou page principale si elles sont utilisées sur chaque page) et les référencer par les directives de la page.

<script type="text/javascript"> var userID = '<%= UserID %>'; var courseID = '<%= CourseID %>'; .... more stuff.... </script> 

Ensuite, réglez les valeurs sur Page_Load (ou dans Page_Load pour la page principale).

  public void Page_Load( object source, EventArgs e ) { UserID = Session["userID"]; CourseID = Session["courseID"]; ... } 

Toutes les réponses ici suggèrent quelque chose comme

 var userID = '<%= UserID %>'; 

Sont tous manquants quelque chose d'important si la variable que vous êtes intégrée peut contenir des données de chaîne arbitraires. Les données de chaîne incrustées doivent être échappées de sorte que si elles contiennent des baies obliques, des citations ou des caractères non imprimables, ils ne provoquent pas votre erreur Javascript.

Rick Strahl a des suggestions pour le code d'échappement nécessaire ici . En utilisant le code de Rick, la variable intégrée ressemblera à ceci:

 var userId = <%= EncodeJsString(UserID) %>; 

Notez qu'il n'y a pas de guillemets maintenant, le code de Rick enveloppe la chaîne échappée avec des guillemets.

La réponse de @ tvanfosson est la façon dont j'ai normalement fait cela dans le passé, mais essayais simplement de penser à quelque chose d'un peu plus élégant. Je pensais que je lancerais cela.

Vous pouvez configurer un HashTable dans le code-logement et également initialiser un JavaScriptSerializer :

 Protected json As New System.Web.Script.Serialization.JavaScriptSerializer Protected jsvars As New Hashtable 

Ensuite, définissez des variables comme ceci:

 jsvars.Add("name", "value") 

Ensuite, sérialisez les variables en JavaScript dans votre page:

 <script type="text/javascript"> var vars = <%=json.Serialize(jsvars)%>; alert(vars.name); </script> 

Cela garantit que toutes les variables sont correctement échappées et minimisent également le code si vous devez travailler avec beaucoup de variables.

Cet article décrit La solution la plus pragmatique Plusieurs solutions pragmatiques à votre problème.

Voici les étapes que vous devrez prendre:

Dans votre code derrière la page:

 private int _userId; private int _courseId; protected int CourseId { get { return _courseId;} set { _courseId = value;} } protected int UserId { get { return _userId;} set { _userId = value;} } 

Étape 2: en fonction de vos besoins, vous devez maintenant configurer ces propriétés. La capture est que ces propriétés doivent être définies avant d'être référencées à partir du JavaScript. Peut-être quelque chose comme ça dans l'événement Page_Load :

 _userId = Session["userId"]; _courseId = Request.QueryString["CourseId"] != null ? Request.QueryString["CourseId"] : String.empty; 

Bien sûr, vous pouvez analyser les types appropriés en fonction de vos besoins.

Enfin, vous pouvez les référencer en JavaScript comme suit:

 var currentUserId = '<% = UserId %>'; var currentCouseId = '<% = CourseId %>'; 

Cela devrait certainement fonctionner. J'ai utilisé cette approche à plusieurs reprises.

En passant les données côté serveur .NET vers JavaScript , je liste diverses approches, y compris:

  1. Obtenir des données en effectuant une demande AJAX
  2. Chargement des données par un fichier JavaScript externe
  3. Ouverture d'une connexion persistante avec SignalR
  4. Ajout de données aux éléments HTML
  5. Affectation directe de données à une variable JavaScript
  6. Serialiser un objet .NET dans un littérature JavaScript

Vous pouvez également utiliser les cookies HTTP. Cette approche est agréable si vous devez également transmettre des valeurs à l'autre direction.

Je suis en train de faire la même chose. Je ne fais que passer les valeurs que je pourrais avoir lors de l'initialisation et celles du constructeur de l'objet API. Je n'ai pas vu d'exigences quant à la création de l'objet API, de la façon dont il se trouve dans le code de l'OCS.

Je ne suis pas sûr des fichiers SCORM ou .ashx (pas d'expérience là-bas), mais en ce qui concerne l'obtention de valeurs d'ASP.NET, vous pouvez faire toutes sortes de choses comme

 var xyz = '<%= variable %>'; 

À partir de votre page ASP.NET. Il existe plusieurs façons d'y parvenir, mais le résultat final est que la page ASP.NET rend les valeurs de la variable dans le HTML (ou JavaScript) qui est envoyé au navigateur.

Il s'agit d'une réponse générique ASP.NET et JavaScript, il peut y avoir une solution plus élégante pour vous.