web-dev-qa-db-fra.com

Comment puis-je fournir des données de variables JavaScript à partir de variables ASP.NET?

J'ai créé une API SCORM pour notre LMS et en ce moment j'utilise des variables userID et courseID codées en dur (variables qui référencent les choses dans la base de données). J'ai besoin de transmettre les vrais ID utilisateur et courseID au lieu d'utiliser ceux codés en dur. Je sais que l'ID utilisateur est stocké dans la session et que l'ID course est transmis depuis la page de lancement.

Comment les intégrer à JavaScript afin de pouvoir les inclure dans mes appels au .ashx qui gère les appels SCORM?

25
MetaGuru

Probablement meilleur plus facile de les exposer en tant que propriétés de votre page (ou page maître si elles sont utilisées sur chaque page) et de les référencer via des directives de page.

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

     .... more stuff....
 </script>

Ensuite, définissez les valeurs sur▶Load (ou dans le PageLoadLoad pour la page maître).

  public void Page_Load( object source, EventArgs e )
  {

        UserID = Session["userID"];
        CourseID = Session["courseID"];
        ...
  }
43
tvanfosson

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

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

il manque à tous quelque chose d'important si la variable dans laquelle vous êtes incorporé peut contenir des données de chaîne arbitraires. Les données de chaîne incorporées doivent être échappées afin que si elles contiennent des barres obliques inverses, des guillemets ou des caractères non imprimables, elles n'entraînent pas d'erreur Javascript.

Rick Strahl a quelques 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 d'échappement avec des guillemets.

8
andynormancx

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

Vous pouvez configurer un HashTable dans le codebehind 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 minimise également le code si vous devez travailler avec un grand nombre de variables.

8
David Hammond

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

5
Andrew Hare

Voici les étapes que vous devrez suivre:

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. Le hic 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 le Page_Load un événement:

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

Bien sûr, vous pouvez les analyser en 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.

4
Shiva

Dans Passing .NET Server-Side Data to JavaScript , j'énumère diverses approches, notamment:

  1. Récupération de données en effectuant une demande AJAX
  2. Chargement de données via un fichier JavaScript externe
  3. Ouverture d'une connexion persistante avec SignalR
  4. Association de données à des éléments HTML
  5. Affectation directe de données à une variable JavaScript
  6. Sérialisation d'un objet .NET dans un littéral JavaScript
2
Marius Schulz

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

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

à partir de votre page ASP.NET. Il existe différentes façons d'y parvenir, mais le résultat final est que la page ASP.NET restitue les valeurs de la variable dans le code 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.

0
Allen Rice

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

0
nshaw

Je suis en train de faire la même chose. Je passe juste toutes les valeurs dont j'ai besoin lors de l'initialisation et telles dans le constructeur de l'objet API. Je n'ai vu aucune exigence quant à la façon dont l'objet API peut être créé, juste comment il se trouve dans le code du SCO.

0
Dan Appleyard