网站链接按钮在IE

时间:2017-09-06 13:22:46

标签: javascript c# asp.net

我们有一个相当古老的asp.net webforms网站,它使用asp.net linkbutton来允许用户下载文件。我们最初将此作为一个简单的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中则不行。

1 个答案:

答案 0 :(得分:5)

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

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

更新

如果以这种方式使用,则在按下按钮后,表单的target属性将保持为“_blank”。如果表单中有其他按钮,则可能存在问题。

这会更有用......

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

脚本..

<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>