代码之家  ›  专栏  ›  技术社区  ›  David Fox

为什么转义字符会破坏我对responseScripts.add(string)的telerik调用?

  •  0
  • David Fox  · 技术社区  · 15 年前

    这将显示预期的javascript警报消息框:

    RadAjaxManager1.ResponseScripts.Add("alert('blahblahblah');");
    

    虽然这些不:

    RadAjaxManager1.ResponseScripts.Add("alert('blahblah \n blahblahblah');");
    RadAjaxManager1.ResponseScripts.Add("alert('blahblah \r blahblahblah');");
    RadAjaxManager1.ResponseScripts.Add("alert('blahblah \r\n blahblahblah');");
    RadAjaxManager1.ResponseScripts.Add("alert('blahblah \n\t blahblahblah');");
    RadAjaxManager1.ResponseScripts.Add(@"alert('blahblah \n blahblahblah');");
    string message = "blahblahblah \n blahblahblah";
    RadAjaxManager1.ResponseScripts.Add(message);
    

    我找不到任何有关转义符破坏此的文档。我理解add方法的单字符串参数可以是任何脚本。不会引发任何错误,所以我的最佳猜测是JavaScript格式不正确。

    1 回复  |  直到 15 年前
        1
  •  2
  •   lingvomir    15 年前

    您在字符串中添加的\n实际上是在.NET中作为新行进行分析的,因此它以新行的形式到达客户端。例如:

    setTimeout(function(){alert('blahblah 
    blahblahblah');}, 0);
    

    上述不是有效的javascript代码,将不会执行。为了在客户机脚本中有一个实际的\n,您必须在服务器代码中将其作为\n进行转义。例如:

    RadAjaxManager1.ResponseScripts.Add("alert('blahblah \\n blahblahblah');");
    

    将输出:

    setTimeout(function(){alert('blahblah \n blahblahblah');}, 0);