【问题标题】:Website linkbutton doesnt work in IE网站链接按钮在 IE 中不起作用
【发布时间】:2023-03-28 07:12:01
【问题描述】:

我们有一个相当老的 asp.net webforms 站点,它使用 asp.net 链接按钮来允许用户下载文件。我们最初将其作为简单的 a href,但我们必须在服务器端处理按钮单击事件才能运行一些后端代码。在 chrome 中一切正常,但是在 IE(我们正在运行 IE 11)中,每当您使用此链接按钮单击下载文件时,您都会收到以下客户端错误:

Error: The value of the property '__doPostBack' is null or undefined, not a Function object

我们的后端代码甚至没有被触发,所以我们知道这不是服务器端错误,因为调试器甚至没有命中。我们进行了一些搜索以查看可能导致此问题的原因,并且大多数人提到您需要在服务器上安装 .net 4.5。但是我们已经安装了 .net 4.5,并且我们遇到过其他帖子,它们有类似的问题,但根本不适用于我们。

我正在尝试帮助另一个团队解决此问题,但我们对此无能为力。链接按钮的定义很简单:

<asp:LinkButton runat="server" ID="lbName2" Target="_blank" OnClick="DownloadFile_Click"></asp:LinkButton>

OnClick 事件只是一些服务器端代码,但我们甚至没有点击服务器端代码,但如果它有帮助,这里是代码:

 protected void DownloadFile_Click(object sender, EventArgs e)
        {
            var fileName = lbName2.Text;
            string newFileName;
            var serverPath = HttpContext.Current.Server.MapPath(hdnParentDocumentAbsolutePath.Value);
            //get starting point of version within file name
            //for instance mydocument(v1.0).docx
            int index = fileName.IndexOf("(v");

            if (index > 0)
            {
                //found a version number, strip it out.
                var name = fileName.Substring(0, index);
                int index2 = fileName.IndexOf(").");
                var extension = fileName.Substring(index2 + 2);
                newFileName = name + "." + extension;
            }
            else
            {
                newFileName = fileName;
            }

            //download the file
            FileInfo file = new FileInfo(serverPath + "\\" + fileName);
            Response.Clear();
            Response.AddHeader("Content-Disposition", "attachment; filename=" + newFileName);
            Response.AddHeader("Content-Length", file.Length.ToString());
            Response.ContentType = "application/octet-stream";
            Response.WriteFile(file.FullName);
            Response.End();
        }

当我们单击链接按钮时,我们得到脚本错误,然后我们在 IE 中得到 This page can't be displayed 错误。它应该只是下载文件。同样,这在 chrome 和 ff 中可以正常工作,但在 IE11 中则不行。

【问题讨论】:

  • 在黑暗中野蛮刺伤,但您是否启用了 BrowserSync?
  • 内网站点?是否处于兼容模式(通常是哪些内网站点)?
  • 可以this帮忙吗?
  • 您是否在兼容模式下运行 IE11?如果没有,如果您为旧版本启用它怎么办?它解决了问题吗? (如果您应该插入 metatag x-ua compatible 以强制兼容,而不是仅针对您网站的页面启用 - 不是针对在浏览器中打开的所有文档)
  • 这不是兼容模式问题,因为我们也对此进行了测试。我们尝试启用兼容模式同样的问题。

标签: javascript c# asp.net


【解决方案1】:

Target="_blank" 的定义导致问题。 LinkBut​​ton 实际上不是一个链接,它是一个回发控件。需要在表单上做定义。

<asp:LinkButton runat="server" ID="lbName2" OnClientClick="window.document.forms[0].target = '_blank'"  OnClick="DownloadFile_Click"></asp:LinkButton>

更新:

如果以这种方式使用,按钮按下后表单的目标属性将保持“_blank”。如果表单中还有其他按钮,则可能会出现问题。

这会更有用...

<asp:LinkButton runat="server" ID="lbName2" data-target="_blank"  OnClick="DownloadFile_Click"></asp:LinkButton>

所有页面的脚本..

<script>
    $(function () {
        $('a').click(function () {
            if ($(this).data().target) {
                window.document.forms[0].target = $(this).data().target;
            } else {
                window.document.forms[0].target = '_self';
            }
        });
    });
</script>

【讨论】:

  • 这个***成功了!!所以这整个时间都是target=_blank?我应该更清楚,我知道一个 href 有这个属性可以在新窗口中打开。但是其他线程上的很多人都说只需将 _blank 用于链接按钮,我在网上看到了很多人们这样做的代码。我想这个故事的精神是不要相信互联网上的一切!
猜你喜欢
  • 1970-01-01
  • 2021-12-17
  • 1970-01-01
  • 2019-01-25
  • 2014-12-29
  • 1970-01-01
  • 2018-11-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多