LMS用のSCORM APIを作成しました。現在、ハードコードされたuserID変数とcourseID変数(データベース内のものを参照する変数)を使用しています。ハードコードされたものを使用する代わりに、実際のユーザーIDとコースIDを渡す必要があります。 userIDがセッションに保存され、courseIDが起動ページから渡されることを知っています。
これらをJavaScriptに取り込み、SCORM呼び出しを処理する.ashxへの呼び出しにそれらを含めるにはどうすればよいですか?
多分 ベスト それらをページ(またはすべてのページで使用する場合はマスターページ)のプロパティとして公開し、ページディレクティブを介して参照するのが最も簡単です。
<script type="text/javascript">
var userID = '<%= UserID %>';
var courseID = '<%= CourseID %>';
.... more stuff....
</script>
次に、Page_Load(またはマスターページのPage_Load)に値を設定します。
public void Page_Load( object source, EventArgs e )
{
UserID = Session["userID"];
CourseID = Session["courseID"];
...
}
ここで何かを示唆するすべての答え
var userID = '<%= UserID %>';
埋め込まれている変数に任意の文字列データが含まれている可能性がある場合、すべて重要なものが欠けています。埋め込まれた文字列データはエスケープする必要があるため、バックスラッシュ、引用符、または印刷できない文字が含まれていても、JavaScriptでエラーが発生しません。
Rick Strahlは、必要なエスケープコード here についていくつかの提案をしています。 Rickのコードを使用すると、埋め込み変数は次のようになります。
var userId = <%= EncodeJsString(UserID) %>;
現在は引用符がないことに注意してください。Rickのコードはエスケープされた文字列を引用符で囲みます。
@ tvanfossonの答え は、私が過去にこれを通常行った方法ですが、もう少しエレガントなものを考えようとしていました。私はこれをそこに捨てると思いました。
コードビハインドでHashTableを設定し、JavaScriptSerializer
を初期化することもできます。
Protected json As New System.Web.Script.Serialization.JavaScriptSerializer
Protected jsvars As New Hashtable
次に、次のように変数を設定します。
jsvars.Add("name", "value")
次に、変数をページ内のJavaScriptにシリアル化します。
<script type="text/javascript">
var vars = <%=json.Serialize(jsvars)%>;
alert(vars.name);
</script>
これにより、すべての変数が適切にエスケープされ、多数の変数を処理する必要がある場合にコードが最小限に抑えられます。
この記事 について 最も実用的なソリューション あなたの問題に対するいくつかの実用的な解決策。
以下に、実行する必要がある手順を示します。
コードビハインドページで:
private int _userId;
private int _courseId;
protected int CourseId
{
get { return _courseId;}
set { _courseId = value;}
}
protected int UserId
{
get { return _userId;}
set { _userId = value;}
}
ステップ2:要件に基づいて、これらのプロパティを設定する必要があります。問題は、これらのプロパティをJavaScriptから参照する前に設定する必要があることです。たぶんPage_Load
イベント:
_userId = Session["userId"];
_courseId = Request.QueryString["CourseId"] != null ? Request.QueryString["CourseId"] : String.empty;
もちろん、要件に基づいて適切な型に解析することができます。
最後に、次のようにJavaScriptでそれらを参照できます。
var currentUserId = '<% = UserId %>';
var currentCouseId = '<% = CourseId %>';
これは間違いなく動作するはずです。私はこのアプローチを何度も使用しています。
。NETサーバー側のデータをJavaScriptに渡す には、次のようなさまざまなアプローチが記載されています。
SCORMファイルや.ashxファイルについてはわかりません(そこでの経験はありません)が、ASP.NETから値を取得する限り、次のようなさまざまなことができます
var xyz = '<%= variable %>';
aSP.NETページ内から。これを行うにはさまざまな方法がありますが、最終的には、ASP.NETページがブラウザに送信されるHTML(またはJavaScript)で変数の値をレンダリングします。
これは一般的なASP.NETとJavaScriptの答えです。もっとエレガントな解決策があるかもしれません。
HTTP Cookieを使用することもできます。他の方向にも値を渡す必要がある場合、このアプローチは適切です。
私は同じことをしている最中です。 APIオブジェクトのコンストラクターで、初期化などに必要な値を渡しているだけです。 APIオブジェクトを作成する方法についての要件は確認していません。SCOのコードでAPIオブジェクトを配置する方法についてだけです。