我为LMS创建了一个SCORM API,现在我正在使用硬编码的userID和courseID变量(引用数据库中的东西的变量)。我需要传递真实的userID和courseID,而不是使用硬编码的。我知道userID存储在会话中,courseID从启动页面传递。
如何将这些内容导入JavaScript,以便将其包含在我处理SCORM调用的.ashx的调用中?
答案 0 :(得分:43)
可能最好最容易将它们公开为页面的属性(如果在每个页面上使用,则显示母版页),并通过页面指令引用它们。
<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"];
...
}
答案 1 :(得分:8)
这里的所有答案都提供了类似
的内容var userID = '<%= UserID %>';
如果嵌入的变量可以包含任意字符串数据,那么都会遗漏一些重要内容。嵌入的字符串数据需要进行转义,这样如果它包含反斜杠,引号或不可打印的字符,则不会导致Javascript错误。
Rick Strahl对所需的转义代码提出了一些建议here。 使用Rick的代码,嵌入变量将如下所示:
var userId = <%= EncodeJsString(UserID) %>;
请注意,现在没有引号,Rick的代码用引号包装转义字符串。
答案 2 :(得分:8)
@tvanfosson's answer我过去通常都是这样做的,但只是想想一些更优雅的东西。以为我会把它扔出去。
您可以在代码隐藏中设置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>
这可以确保所有变量都被正确转义,并且如果您需要处理大量变量,还可以最小化代码。
答案 3 :(得分:5)
This article描述了最实用的解决方案几个实用的解决方案。
答案 4 :(得分: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 %>';
这绝对有效。我多次使用过这种方法。
答案 5 :(得分:2)
在Passing .NET Server-Side Data to JavaScript中,我列出了各种方法,包括:
答案 6 :(得分:0)
我不确定SCORM或.ashx文件(没有经验)但是从ASP.NET获取值你可以做各种各样的事情,比如
var xyz = '<%= variable %>';
从ASP.NET页面中。有多种方法可以实现这一点,但最终结果是ASP.NET页面呈现发送到浏览器的HTML(或JavaScript)中变量的值。
这是一个通用的ASP.NET和JavaScript答案,可能会为您提供更优雅的解决方案。
答案 7 :(得分:0)
您也可以使用HTTP Cookie。如果您还需要将值传递给另一个方向,那么这种方法很不错。
答案 8 :(得分:0)
我正在做同样的事情。我只是在初始化时传递我可能需要的任何值,例如在API对象的构造函数中。我没有看到有关如何创建API对象的任何要求,以及它在SCO代码中的位置。