Come posso fornire i dati delle variabili JavaScript dalle variabili ASP.NET?

Ho creato un’API SCORM per il nostro LMS e in questo momento sto usando userID hard coded e variabili courseID (variabili che fanno riferimento a cose nel database). Ho bisogno di passare il vero userID e courseID invece di usare quelli con codice fisso. So che l’ID utente è memorizzato nella sessione e l’ID corso viene passato dalla pagina di avvio.

Come faccio a inserirli in JavaScript, così posso includerli nelle mie chiamate a .ashx che gestisce le chiamate SCORM?

Probabilmente migliore è più facile esporli come proprietà della pagina (o pagina principale se utilizzata su ogni pagina) e consultarli tramite le direttive della pagina.

 

Quindi imposta i valori su Page_Load (o nella pagina Page_Load per la pagina principale).

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

Tutte le risposte qui suggeriscono qualcosa di simile

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

tutti mancano qualcosa di importante se la variabile che si è incorporata può contenere dati di stringa arbitrari. I dati di stringa incorporati devono essere sottoposti a escape in modo che se contiene barre rovesciate, virgolette o caratteri non stampabili non causino errori di Javascript.

Rick Strahl ha alcuni suggerimenti per il codice di escape necessario qui . Usando il codice di Rick la variabile incorporata sarà simile a questa:

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

Nota che ora non ci sono citazioni, il codice di Rick avvolge la stringa con le virgolette.

La risposta di @ tvanfosson è come ho fatto normalmente in passato, ma stavo solo cercando di pensare a qualcosa di un po ‘più elegante. Ho pensato di buttarlo qui.

Puoi configurare una HashTable nel codebehind e anche inizializzare JavaScriptSerializer :

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

Quindi imposta variabili come questa:

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

Quindi serializza le variabili in JavaScript nella tua pagina:

  

Questo assicura che tutte le variabili siano debitamente escapate e minimizzi anche il codice se hai bisogno di lavorare con molte variabili.

Questo articolo descrive la soluzione più pragmatica diverse soluzioni pragmatiche al tuo problema.

Ecco i passaggi che dovrai intraprendere:

Nel tuo codice dietro la pagina:

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

Passo 2: in base alle tue esigenze ora devi configurare queste proprietà. Il problema è che queste proprietà dovrebbero essere impostate prima di essere referenziate da JavaScript. Forse qualcosa di simile nell’evento Page_Load :

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

Ovviamente è ansible analizzarli in base ai tipi appropriati in base alle proprie esigenze.

Infine, puoi fare riferimento in JavaScript come segue:

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

Questo dovrebbe sicuramente funzionare. Ho usato questo approccio molte volte.

Nel passaggio di dati lato server .NET a JavaScript , elencherò vari approcci, tra cui:

  1. Recupero di dati effettuando una richiesta AJAX
  2. Caricamento dei dati tramite un file JavaScript esterno
  3. Apertura di una connessione persistente con SignalR
  4. Albind dati ad elementi HTML
  5. Assegnazione di dati direttamente a una variabile JavaScript
  6. Serializzazione di un object .NET in un JavaScript letterale

Puoi anche usare i cookie HTTP. Questo approccio è piacevole se è necessario passare anche i valori nell’altra direzione.

Sono in procinto di fare la stessa cosa. Sto solo passando i valori che potrei aver bisogno al momento dell’inizializzazione e tali nel costruttore dell’object API. Non ho visto alcun requisito su come l’object API possa essere creato, solo come si trova nel codice dello SCO.

Non sono sicuro dei file SCORM o .ashx (nessuna esperienza in questo campo), ma per quanto riguarda l’ottenimento di valori da ASP.NET è ansible fare ogni genere di cose come

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

dalla tua pagina ASP.NET. Esistono vari modi per eseguire ciò, ma il risultato finale è che la pagina ASP.NET restituisce i valori della variabile nell’HTML (o JavaScript) che viene inviato al browser.

Questa è una risposta ASP.NET generica e JavaScript, potrebbe esserci una soluzione più elegante là fuori per voi.