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

Met*_*uru 26 javascript asp.net escaping scorm

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

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

tva*_*son 44

大概 最好 最容易将它们公开为页面属性(如果在每个页面上使用,则为母版页),并通过页面指令引用它们.

 <script type="text/javascript">
     var userID = '<%= UserID %>';
     var courseID = '<%= CourseID %>';

     .... more stuff....
 </script>
Run Code Online (Sandbox Code Playgroud)

然后在Page_Load(或主页的Page_Load)中设置值.

  public void Page_Load( object source, EventArgs e )
  {

        UserID = Session["userID"];
        CourseID = Session["courseID"];
        ...
  }
Run Code Online (Sandbox Code Playgroud)

  • 不要忘记嵌入的Javascript字符串需要被转义,否则字符串中的反斜杠,引号等会破坏客户端的Javascript. (3认同)
  • 我处理的系统中的许多用户ID都是由sysadmin输入的字符串.这就是o'brien这个名字成为一个非常好的测试案例的原因.通常最好采取防御措施,而不是假设您嵌入的变量不是Javascript字符串安全的. (3认同)
  • @andynormancx - 注意到,但是id字段很可能是一个数值而不是问题. (2认同)

and*_*ncx 8

这里的所有答案都表明了类似的东西

var userID = '<%= UserID %>';
Run Code Online (Sandbox Code Playgroud)

如果您嵌入的变量可以包含任意字符串数据,则都会遗漏一些重要内容.嵌入的字符串数据需要进行转义,这样如果它包含反斜杠,引号或不可打印的字符,则不会导致Javascript出错.

Rick Strahl对此处所需的转义代码有一些建议.使用Rick的代码,嵌入变量将如下所示:

var userId = <%= EncodeJsString(UserID) %>;
Run Code Online (Sandbox Code Playgroud)

请注意,现在没有引号,Rick的代码用引号包装转义字符串.

  • 嗯?如何在客户端进行此项工作?在将文本嵌入javascript变量之前,需要对文本进行转义. (4认同)

Dav*_*ond 8

@ tvanfosson的答案是我过去通常如何做到这一点,但只是想想一些更优雅的东西.以为我会把它扔出去.

您可以在代码隐藏中设置HashTable并初始化JavaScriptSerializer:

Protected json As New System.Web.Script.Serialization.JavaScriptSerializer
Protected jsvars As New Hashtable
Run Code Online (Sandbox Code Playgroud)

然后像这样设置变量:

jsvars.Add("name", "value")
Run Code Online (Sandbox Code Playgroud)

然后在页面中将变量序列化为JavaScript:

<script type="text/javascript">
    var vars = <%=json.Serialize(jsvars)%>;
    alert(vars.name);
</script>
Run Code Online (Sandbox Code Playgroud)

这可确保所有变量都被正确转义,并且如果您需要处理大量变量,还可以最小化代码.


And*_*are 5

本文介绍最实用的解决方案 几个实用的解决方案来解决您的问题.