27

我已经为我们的 LMS 创建了一个 SCORM API,现在我正在使用硬编码的 userID 和 courseID 变量(引用数据库中事物的变量)。我需要传递真实的用户 ID 和课程 ID,而不是使用硬编码的。我知道用户 ID 存储在会话中,并且课程 ID 是从启动页面传递过来的。

如何将它们放入 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

将 .NET 服务器端数据传递给 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 回答