ASP.NET & VB.NET中LinkButton新窗口打开PDF报错求助
问题原因分析
你遇到的Error BC30456是因为asp:LinkButton的OnClick属性是绑定服务器端事件方法的,你写的window.open是客户端JavaScript代码,服务器端代码上下文里不存在window这个对象,所以编译报错。
正确实现方案
方案1:用HTML原生标签(最简洁)
如果不需要服务器端逻辑处理,直接用普通超链接包裹图片即可,默认支持新标签页打开PDF:
<div style="float:right;"> <a href="~/Content/ManagementZonesMap.pdf" target="_blank" style="text-decoration:none;"> <asp:Image ID="Image1" runat="server" ImageUrl="~/Images/MapIcon.jpg" Height="40%" Width="40%" /> </a> </div>
href指定PDF文件路径,ASP.NET会自动解析~根路径;target="_blank"强制在新标签页打开目标文件。
方案2:保留asp:LinkButton,改用OnClientClick
如果必须使用asp:LinkButton控件,需要用OnClientClick属性绑定客户端脚本,同时阻止服务器端回发:
<div style="float:right;"> <asp:LinkButton ID="btnMap" runat="server" style="text-decoration:none;" OnClientClick="window.open('<%= ResolveUrl("~/Content/ManagementZonesMap.pdf") %>', '_blank', 'fullscreen=no'); return false;"> <asp:Image ID="Image1" runat="server" ImageUrl="~/Images/MapIcon.jpg" Height="40%" Width="40%" /> </asp:LinkButton> </div>
OnClientClick是客户端事件属性,专门用于执行JavaScript代码;ResolveUrl确保根路径~在部署后能被正确解析;return false;必须添加,否则LinkButton会触发服务器端回发,中断新标签页的打开操作。
额外验证建议
确认PDF文件确实放在项目的Content文件夹下,路径大小写要和代码一致(Windows本地不区分,但部署到Linux/IIS环境可能区分)。右键项目中的PDF文件,将“复制到输出目录”设置为“如果较新则复制”,确保部署时文件能被正确同步。
内容的提问来源于stack exchange,提问作者Ann
相关产品推荐
相关产品推荐

