2010-05-07 96 views
1

我加载一个js变量是这样的:奇怪的静态方法的行为

var message = '<%= CAnunturi.CPLATA_RAMBURS_INFO %>'; 

其中静态字符串CPLATA_RAMBURS_INFO我把这样的:

public static string CPLATA_RAMBURS_INFO = "test"; 

我用它相当不错,在这个方法。

<script type="text/javascript"> 
    var categoryParam = '<%= CQueryStringParameters.CATEGORY %>'; 
    var subcategoryParam = '<%= CQueryStringParameters.SUBCATEGORY1_ID %>'; 
    var message = '<%= CAnunturi.CPLATA_RAMBURS_INFO %>'; 

    function timedInfo(header) { 
     $.jGrowl(message, { header: header }); 
    }; 
</script> 

所以消息出现。

我不记得,为什么,iso的“测试”,如果我从静态方法中获取值,则使用消息js var不再成功(消息不再出现)。

public static string CPLATA_RAMBURS_INFO = getRambursInfo(); 

public static string getRambursInfo() 
{ 
    return System.IO.File.ReadAllText(PathsUtil.getRambursPlataFilePath()); 
} 

编辑: 源代码:

<script type="text/javascript"> 
    var categoryParam = 'category'; 
    var subcategoryParam = 'subcategory1Id'; 
    var message = 'Lorem ipsum dolor sit amet, eu curabitur venenatis 

灵猫pellentesque tortor tempor, 南EST suspendisse,aenean前庭, suspendisse在格言法无eget metus aenean。 在luctus,预期值,也porttitor suscipit NIBH,aenean UT,commodo velit LEO volutpat ullamcorper。 ';

​​
+4

究竟是什么出了问题?是否有例外? – 2010-05-07 19:44:48

+0

您可以在页面生成后查看源代码并查看显示内容吗?也许你会看到问题所在。 – 2010-05-07 19:49:34

+0

$ .jGrowl应该显示一条消息。在它显示了其良好的第一情况下,在第二,我看到消息变种的源代码中的内容,但不再显示的消息... – 2010-05-07 19:49:51

回答

2

你的文件中包含特殊字符(可能是一个新行或')引起渲染JavaScript来包含语法错误。

您需要使用Anti-XSS Toolkit逃串,就像这样:

var message = '<%= AntiXss.JavaScriptEncode(CAnunturi.CPLATA_RAMBURS_INFO) %>'; 

编辑:如果AntiXss没有帮助,请尝试以下功能:

public static void QuoteString(this string value, StringBuilder b) { 
    if (String.IsNullOrEmpty(value)) 
     return ""; 

    var b = new StringBuilder(); 
    int startIndex = 0; 
    int count = 0; 
    for (int i = 0; i < value.Length; i++) { 
     char c = value[i]; 

     // Append the unhandled characters (that do not require special treament) 
     // to the string builder when special characters are detected. 
     if (c == '\r' || c == '\t' || c == '\"' || c == '\'' || c == '<' || c == '>' || 
      c == '\\' || c == '\n' || c == '\b' || c == '\f' || c < ' ') { 
      if (b == null) { 
       b = new StringBuilder(value.Length + 5); 
      } 

      if (count > 0) { 
       b.Append(value, startIndex, count); 
      } 

      startIndex = i + 1; 
      count = 0; 
     } 

     switch (c) { 
      case '\r': 
       b.Append("\\r"); 
       break; 
      case '\t': 
       b.Append("\\t"); 
       break; 
      case '\"': 
       b.Append("\\\""); 
       break; 
      case '\\': 
       b.Append("\\\\"); 
       break; 
      case '\n': 
       b.Append("\\n"); 
       break; 
      case '\b': 
       b.Append("\\b"); 
       break; 
      case '\f': 
       b.Append("\\f"); 
       break; 
      case '\'': 
      case '>': 
      case '<': 
       AppendCharAsUnicode(b, c); 
       break; 
      default: 
       if (c < ' ') { 
        AppendCharAsUnicode(b, c); 
       } else { 
        count++; 
       } 
       break; 
     } 
    } 

    if (b == null) { 
     b.Append(value); 
    } 

    if (count > 0) { 
     b.Append(value, startIndex, count); 
    } 

    return b.ToString(); 
} 
+0

我从微软公司获得了Axss,导入这个:使用Microsoft.Security.Application;但仍然没有看到它...你知道为什么吗? – 2010-05-07 20:07:54

+0

请向我们展示源代码中的'message' var。 – SLaks 2010-05-07 20:16:21

+0

完成............编辑 – 2010-05-07 20:25:38

0

尝试分配值给Page_Load()函数中的变量。我认为它会起作用。

+0

这根本行不通。 (这是一个Javascript变量) – SLaks 2010-05-07 19:50:29

+0

我的意思是: public static string CPLATA_RAMBURS_INFO; void Page_Load(object sender,EventArgs e) CPLATA_RAMBURS_INFO = getRambursInfo(); } – Artur 2010-05-07 19:57:34

+0

这没有帮助。 – SLaks 2010-05-07 20:03:11