我已经为我们的 LMS 创建了一个 SCORM API,现在我正在使用硬编码的 userID 和 courseID 变量(引用数据库中事物的变量)。我需要传递真实的用户 ID 和课程 ID,而不是使用硬编码的。我知道 userID 存储在会话中,而 courseID 是从启动页面传递过来的。
我如何将这些输入 JavaScript 以便我可以将它们包含在我对处理 SCORM 调用的 .ashx 的调用中?
我已经为我们的 LMS 创建了一个 SCORM API,现在我正在使用硬编码的 userID 和 courseID 变量(引用数据库中事物的变量)。我需要传递真实的用户 ID 和课程 ID,而不是使用硬编码的。我知道 userID 存储在会话中,而 courseID 是从启动页面传递过来的。
我如何将这些输入 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 %>';
这绝对有效。我已经多次使用这种方法。