web-dev-qa-db-ja.com

ASP.NET変数からJavaScript変数データを渡すにはどうすればよいですか?

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

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

25
MetaGuru

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

 <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"];
        ...
  }
43
tvanfosson

ここで何かを示唆するすべての答え

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

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

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

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

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

8
andynormancx

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

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

8
David Hammond

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

5
Andrew Hare

以下に、実行する必要がある手順を示します。

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

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

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

4
Shiva

。NETサーバー側のデータをJavaScriptに渡す には、次のようなさまざまなアプローチが記載されています。

  1. AJAXリクエストを作成してデータを取得する
  2. 外部JavaScriptファイルを介したデータのロード
  3. SignalRで永続的な接続を開く
  4. HTML要素へのデータの添付
  5. JavaScript変数へのデータの直接割り当て
  6. .NETオブジェクトをJavaScriptリテラルにシリアル化する
2
Marius Schulz

SCORMファイルや.ashxファイルについてはわかりません(そこでの経験はありません)が、ASP.NETから値を取得する限り、次のようなさまざまなことができます

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

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

これは一般的なASP.NETとJavaScriptの答えです。もっとエレガントな解決策があるかもしれません。

0
Allen Rice

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

0
nshaw

私は同じことをしている最中です。 APIオブジェクトのコンストラクターで、初期化などに必要な値を渡しているだけです。 APIオブジェクトを作成する方法についての要件は確認していません。SCOのコードでAPIオブジェクトを配置する方法についてだけです。

0
Dan Appleyard