GridView中LinkButton跳转异常:旧浏览器仅跳转至当前页面(Chrome等正常)
这种旧浏览器兼容性问题我之前也碰到过,大概率是LinkButton默认的回发机制在老浏览器里没被正确拦截,导致点击后触发了页面回发而不是跳转。给你几个针对性的解决方案:
方案1:改用HyperLink控件(最推荐)
HyperLink是纯客户端跳转控件,没有服务器回发逻辑,兼容性拉满,完全适配旧浏览器。把GridView里的LinkButton替换成HyperLink即可:
<asp:TemplateField HeaderText="跳转"> <ItemTemplate> <asp:HyperLink ID="hlJump" runat="server" NavigateUrl='<%# Eval("TargetUrl") %>' Text='<%# Eval("LinkText") %>'> </asp:HyperLink> </ItemTemplate> </asp:TemplateField>
如果需要在跳转前做一些简单的客户端校验,也可以给HyperLink加OnClientClick事件,只要最后返回true就行:
OnClientClick="return confirm('确定要跳转吗?');"
方案2:修改LinkButton的客户端事件,强制拦截回发
如果必须保留LinkButton(比如需要触发一些服务器端逻辑后再跳转),可以通过OnClientClick事件添加客户端脚本,先执行跳转再阻止回发:
<asp:LinkButton ID="lbJump" runat="server" Text="跳转" OnClientClick='<%# "window.location.href=\"" + Eval("TargetUrl") + "\"; return false;" %>'> </asp:LinkButton>
这里的return false;是关键,它会阻止LinkButton默认的服务器回发行为,强制浏览器执行客户端跳转。
如果是在后台代码绑定URL,也可以这样写:
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { LinkButton lbJump = (LinkButton)e.Row.FindControl("lbJump"); string targetUrl = DataBinder.Eval(e.Row.DataItem, "TargetUrl").ToString(); lbJump.OnClientClick = $"window.location.href='{targetUrl}'; return false;"; } }
方案3:检查并修复JS兼容性问题
如果你的跳转逻辑依赖自定义JavaScript,要确保代码兼容旧浏览器(比如IE8及以下):
- 避免使用ES6+特性(箭头函数、
let/const、模板字符串等),改用ES5语法 - 事件绑定改用
attachEvent(针对旧IE)替代addEventListener - 确保
window.location.href的赋值没有语法错误,旧浏览器对引号嵌套的容错性更低
额外排查点
- 确认目标URL是绝对路径:旧浏览器对相对路径的解析可能存在问题,比如把
../TargetPage.aspx改成http://yourdomain.com/TargetPage.aspx试试 - 检查旧浏览器的控制台:按F12打开开发者工具,查看是否有JS报错,很多兼容性问题都是脚本错误导致的
内容的提问来源于stack exchange,提问作者RDoonds
相关产品推荐
相关产品推荐

