我为LMS创建了一个SCORM API,现在我正在使用硬编码的userID和courseID变量(引用数据库中的东西的变量).我需要传递真实的userID和courseID,而不是使用硬编码的.我知道userID存储在会话中,courseID从启动页面传递.
如何将这些内容导入JavaScript中,以便将其包含在我对处理SCORM调用的.ashx的调用中?
大概 最好 最容易将它们公开为页面属性(如果在每个页面上使用,则为母版页),并通过页面指令引用它们.
然后在Page_Load(或主页的Page_Load)中设置值.
public void Page_Load( object source, EventArgs e ) { UserID = Session["userID"]; CourseID = Session["courseID"]; ... }
这里的所有答案都表明了类似的东西
var userID = '<%= UserID %>';
如果您嵌入的变量可以包含任意字符串数据,则都会遗漏一些重要内容.嵌入的字符串数据需要进行转义,这样如果它包含反斜杠,引号或不可打印的字符,则不会导致Javascript出错.
Rick Strahl对此处所需的转义代码有一些建议.使用Rick的代码,嵌入变量将如下所示:
var userId = <%= EncodeJsString(UserID) %>;
请注意,现在没有引号,Rick的代码用引号包装转义字符串.
@ tvanfosson的答案是我过去通常如何做到这一点,但只是想想一些更优雅的东西.以为我会把它扔出去.
您可以在代码隐藏中设置HashTable并初始化JavaScriptSerializer
:
Protected json As New System.Web.Script.Serialization.JavaScriptSerializer Protected jsvars As New Hashtable
然后像这样设置变量:
jsvars.Add("name", "value")
然后在页面中将变量序列化为JavaScript:
这可确保所有变量都被正确转义,并且如果您需要处理大量变量,还可以最小化代码.
本文介绍最实用的解决方案 几个实用的解决方案来解决您的问题.