为什么ASP.NET Webform不识别jQuery代码并报CS1056意外字符'$'错误
问题原因
CS1056属于C#编译错误,出现该报错的核心原因是你当前的脚本引入写法错误,导致ASP.NET服务器端运行时将你的JavaScript文件识别为C#代码尝试编译,$作为jQuery的标识符在C#语法中属于非法字符,因此触发报错。你当前写法有两个明显错误:
- 不能直接在
<asp:ScriptManager>的<Scripts>子节点内放置普通<script>标签,所有通过ScriptManager托管的脚本都需要用<asp:ScriptReference>节点声明 - 给普通JS引入标签添加了
runat="server"属性,同时未使用站点根路径标识~,也会导致路径解析异常
解决步骤
1. 修正母版页的脚本引入写法
将你ScriptManager内站点脚本区域的原有代码替换为如下写法:
<%--Site Scripts--%> <asp:ScriptReference Path="~/Scripts/MyScripts/LogicMain.js" />
2. 调整JS代码的执行时序
为了确保jQuery加载完成后再执行你的业务代码,推荐将LogicMain.js内的代码包裹在DOM加载完成的回调中:
// 标准jQuery DOM加载完成回调 $(function() { // 你的业务代码写在这里,替换下面的测试代码 alert("脚本加载正常"); });
如果存在异步回发后脚本不生效的场景,也可以使用Web Forms专属的客户端加载事件:
Sys.Application.add_load(function () { // 你的业务代码,同步加载、异步回发后都会触发执行 });
3. 备选引入方案(不需要ScriptManager托管的场景)
如果你不需要ScriptManager对你的自定义脚本做打包、合并等处理,也可以直接将脚本引入代码放到ScriptManager标签外、</form>闭合标签之前,写法如下:
</asp:ScriptManager> <script src="~/Scripts/MyScripts/LogicMain.js"></script> </form>
验证
修改完成后重新编译运行站点,所有引用该母版页的页面都会自动加载执行你的自定义JS脚本,不会再出现CS1056报错。
内容的提问来源于stack exchange,提问作者Hassaan Raza
相关产品推荐
相关产品推荐

