我们有一个相当古老的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中则不行。
答案 0 :(得分:5)
导致问题的Target="_blank"
的定义。 LinkButton实际上不是一个链接,它是一个回发控件。需要在表格上做定义。
<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>