27

LMS用のSCORMAPIを作成しました。現在、ハードコードされたuserID変数とcourseID変数(データベース内のものを参照する変数)を使用しています。ハードコードされたものを使用する代わりに、実際のuserIDとcourseIDを渡す必要があります。userIDがセッションに保存され、courseIDが起動ページから渡されることを知っています。

これらをJavaScriptに組み込んで、SCORM呼び出しを処理する.ashxへの呼び出しに含めるにはどうすればよいですか?

4

9 に答える 9

45

おそらく一番それらをページ(またはすべてのページで使用されている場合はマスターページ)のプロパティとして公開し、ページディレクティブを介して参照するのが最も簡単です。

 <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"];
        ...
  }
于 2009-02-16T16:13:54.350 に答える
9

@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>

これにより、すべての変数が適切にエスケープされ、多くの変数を操作する必要がある場合にコードが最小限に抑えられます。

于 2012-01-02T19:23:55.213 に答える
8

ここにあるようなものを示唆するすべての答え

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

埋め込まれている変数に任意の文字列データが含まれている可能性がある場合は、すべて重要なものが欠落しています。埋め込まれた文字列データは、バックスラッシュ、引用符、または印刷できない文字が含まれている場合にJavascriptでエラーが発生しないように、エスケープする必要があります。

Rick Strahlは、ここで必要なエスケープコードについていくつかの提案をしています。Rickのコードを使用すると、埋め込み変数は次のようになります。

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

現在、引用符がないことに注意してください。Rickのコードは、エスケープされた文字列を引用符で囲みます。

于 2009-02-16T18:06:09.883 に答える
5

この記事で最も実用的なソリューションあなたの問題に対するいくつかの実用的な解決策。

于 2009-02-16T16:11:39.037 に答える
4

実行する必要のある手順は次のとおりです。

コードビハインドページ:

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 %>';

これは間違いなく機能するはずです。私はこのアプローチを何度も使用しました。

于 2009-02-16T18:55:42.603 に答える
2

Passing .NET Server-Side Data to JavaScriptでは、次のようなさまざまなアプローチを挙げています。

  1. AJAX リクエストを作成してデータを取得する
  2. 外部 JavaScript ファイルによるデータのロード
  3. SignalR との永続的な接続を開く
  4. HTML 要素へのデータの添付
  5. JavaScript 変数へのデータの直接割り当て
  6. .NET オブジェクトを JavaScript リテラルにシリアル化する
于 2014-11-16T17:59:55.070 に答える
0

SCORMまたは.ashxファイル(経験はありません)についてはよくわかりませんが、ASP.NETから値を取得する限り、次のようなあらゆる種類の処理を実行できます。

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

ASP.NETページ内から。これを実現するにはさまざまな方法がありますが、最終的には、ASP.NETページがブラウザーに送信されるHTML(またはJavaScript)の変数の値をレンダリングします。

これは一般的なASP.NETとJavaScriptの回答であり、より洗練されたソリューションがあるかもしれません。

于 2009-02-16T16:12:07.007 に答える
0

HTTP Cookie を使用することもできます。このアプローチは、反対方向にも値を渡す必要がある場合に便利です。

于 2009-02-16T16:36:46.933 に答える
0

私は同じことをしている最中です。APIオブジェクトのコンストラクターで、初期化などに必要な値を渡しているだけです。API オブジェクトをどのように作成できるか、SCO のコード内でどのように配置するかについての要件は見たことがありません。

于 2009-08-19T17:31:43.377 に答える