LMS用のSCORMAPIを作成しました。現在、ハードコードされたuserID変数とcourseID変数(データベース内のものを参照する変数)を使用しています。ハードコードされたものを使用する代わりに、実際のuserIDとcourseIDを渡す必要があります。userIDがセッションに保存され、courseIDが起動ページから渡されることを知っています。
これらをJavaScriptに組み込んで、SCORM呼び出しを処理する.ashxへの呼び出しに含めるにはどうすればよいですか?
LMS用のSCORMAPIを作成しました。現在、ハードコードされたuserID変数とcourseID変数(データベース内のものを参照する変数)を使用しています。ハードコードされたものを使用する代わりに、実際のuserIDとcourseIDを渡す必要があります。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"];
...
}
@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>
これにより、すべての変数が適切にエスケープされ、多くの変数を操作する必要がある場合にコードが最小限に抑えられます。
ここにあるようなものを示唆するすべての答え
var userID = '<%= UserID %>';
埋め込まれている変数に任意の文字列データが含まれている可能性がある場合は、すべて重要なものが欠落しています。埋め込まれた文字列データは、バックスラッシュ、引用符、または印刷できない文字が含まれている場合にJavascriptでエラーが発生しないように、エスケープする必要があります。
Rick Strahlは、ここで必要なエスケープコードについていくつかの提案をしています。Rickのコードを使用すると、埋め込み変数は次のようになります。
var userId = <%= EncodeJsString(UserID) %>;
現在、引用符がないことに注意してください。Rickのコードは、エスケープされた文字列を引用符で囲みます。
この記事では最も実用的なソリューションあなたの問題に対するいくつかの実用的な解決策。
実行する必要のある手順は次のとおりです。
コードビハインドページ:
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 %>';
これは間違いなく機能するはずです。私はこのアプローチを何度も使用しました。
Passing .NET Server-Side Data to JavaScriptでは、次のようなさまざまなアプローチを挙げています。
SCORMまたは.ashxファイル(経験はありません)についてはよくわかりませんが、ASP.NETから値を取得する限り、次のようなあらゆる種類の処理を実行できます。
var xyz = '<%= variable %>';
ASP.NETページ内から。これを実現するにはさまざまな方法がありますが、最終的には、ASP.NETページがブラウザーに送信されるHTML(またはJavaScript)の変数の値をレンダリングします。
これは一般的なASP.NETとJavaScriptの回答であり、より洗練されたソリューションがあるかもしれません。
HTTP Cookie を使用することもできます。このアプローチは、反対方向にも値を渡す必要がある場合に便利です。
私は同じことをしている最中です。APIオブジェクトのコンストラクターで、初期化などに必要な値を渡しているだけです。API オブジェクトをどのように作成できるか、SCO のコード内でどのように配置するかについての要件は見たことがありません。