如何从ASP.NET变量中提供JavaScript变量数据?

时间:2009-02-16 16:07:41

标签: javascript asp.net escaping scorm

我为LMS创建了一个SCORM API,现在我正在使用硬编码的userID和courseID变量(引用数据库中的东西的变量)。我需要传递真实的userID和courseID,而不是使用硬编码的。我知道userID存储在会话中,courseID从启动页面传递。

如何将这些内容导入JavaScript,以便将其包含在我处理SCORM调用的.ashx的调用中?

9 个答案:

答案 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中,我列出了各种方法,包括:

  1. 通过发出AJAX请求获取数据
  2. 通过外部JavaScript文件加载数据
  3. 使用SignalR打开持久连接
  4. 将数据附加到HTML元素
  5. 直接将数据分配给JavaScript变量
  6. 将.NET对象序列化为JavaScript Literal

答案 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代码中的位置。