You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中window.open无法生效,注册脚本报Unexpected token <语法错误

问题原因分析

嘿,这个报错的根源其实很简单——你在使用ScriptManager.RegisterClientScriptBlock的时候犯了一个小细节错误:

这个方法的最后一个参数addScriptTags你设置成了true,这意味着方法会自动帮你生成并包裹<script>标签。但你自己又在字符串里手动写了转义后的&lt;script&gt;和&lt;/script&gt;,这就导致最终输出到客户端的代码变成了嵌套的<script>标签:

<script>
<script>window.open('www.abc/Print/XMLGenerate.aspx?orders=3571,6548,12365');</script>
</script>

这种嵌套结构完全不符合浏览器的脚本解析规范,自然会抛出Unexpected token <的语法错误。

解决方法

有两种简单的修复方式,推荐第一种:

  • 方式一:移除手动添加的<script>标签,让方法自动生成
    直接删掉字符串里的&lt;script&gt;和&lt;/script&gt;,只保留核心的JavaScript代码即可,因为addScriptTags=true会帮你自动加上正确的标签:

    public void OpenNewWindow(string url) { 
        ScriptManager.RegisterClientScriptBlock(Page, this.GetType(), "newindow", 
            String.Format("window.open('{0}');", url), 
            true); 
    }
    

    这样最终生成的客户端代码就是完全合规的:

    <script>window.open('www.abc/Print/XMLGenerate.aspx?orders=3571,6548,12365');</script>
    
  • 方式二:将addScriptTags设为false,保留手动标签(不推荐)
    如果你一定要自己写<script>标签,那就把最后一个参数改成false,同时注意不要用转义的&lt;,直接写原始的<和>:

    public void OpenNewWindow(string url) { 
        ScriptManager.RegisterClientScriptBlock(Page, this.GetType(), "newindow", 
            String.Format("<script>window.open('{0}');</script>", url), 
            false); 
    }
    

    不过这种方式完全没必要,属于画蛇添足,还是第一种方法更简洁规范。

内容的提问来源于stack exchange,提问作者Mitesh Jain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:54:43