我已经为我们的 LMS 创建了一个 SCORM API,现在我正在使用硬编码的 userID 和 courseID 变量(引用数据库中事物的变量)。我需要传递真实的用户 ID 和课程 ID,而不是使用硬编码的。我知道用户 ID 存储在会话中,并且课程 ID 是从启动页面传递过来的。
如何将它们放入 JavaScript,以便可以将它们包含在对处理 SCORM 调用的 .ashx 的调用中?
我已经为我们的 LMS 创建了一个 SCORM API,现在我正在使用硬编码的 userID 和 courseID 变量(引用数据库中事物的变量)。我需要传递真实的用户 ID 和课程 ID,而不是使用硬编码的。我知道用户 ID 存储在会话中,并且课程 ID 是从启动页面传递过来的。
如何将它们放入 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 %>';
这绝对应该有效。我已经多次使用这种方法。
在将 .NET 服务器端数据传递给 JavaScript中,我列出了各种方法,包括:
我不确定 SCORM 或 .ashx 文件(没有经验),但就从 ASP.NET 获取值而言,你可以做各种各样的事情,比如
var xyz = '<%= variable %>';
从您的 ASP.NET 页面中。有多种方法可以完成此操作,但最终结果是 ASP.NET 页面呈现发送到浏览器的 HTML(或 JavaScript)中的变量值。
这是一个通用的 ASP.NET 和 JavaScript 答案,可能有更优雅的解决方案适合您。
您还可以使用 HTTP cookie。如果您还需要向另一个方向传递值,那么这种方法很好。
我正在做同样的事情。我只是在 API 对象的构造函数中传递初始化时可能需要的任何值。我没有看到关于如何创建 API 对象的任何要求,只是它在 SCO 代码中的位置。