ASP.NET。导出Excel文件后,HTML按钮会导致回发

时间:2015-02-18 14:03:08

标签: c# asp.net excel postback response

我的asp.net网络表单中有asp.net服务器按钮控件和html按钮。

<asp:LinkButton runat="server" ID="btnExportToExcel" OnClick="btnExportToExcel_Click">Excel</asp:LinkButton>
<button type="submit" class="btn btn-info btn-block">Refresh</button>

我使用asp.net按钮OnClick事件发回一个Excel文件。以下是代码:

 protected void btnExportToExcel_Click(object sender, EventArgs e)
 {
    Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
    Response.AddHeader("content-disposition", "attachment;  filename=ExcelDemo.xlsx");
    Response.BinaryWrite(ExcelHelper.GetByteArray(datatable));
    Response.End();
 }

导出到Excel的工作完全正常,但是在导出完成后,所有html按钮开始导致回传,其目标id为负责Excel导出的asp.net按钮控件,即OnClick事件再次触发btnExportToExcel按钮,我再次导出相同的Excel文件。

我在OnClick事件中对响应做错了吗?还是我错过了别的什么?

NB。我可以通过使用asp.net按钮来解决问题,但我想了解问题的本质。

EDIT。在Igor的回复之后,问题与Response无关是正确的(即我认为Response可能缺少某些东西)并且它可以被认为是预期的行为,我需要小心按钮I使用?

3 个答案:

答案 0 :(得分:1)

我在开头错过了Response.Clear

protected void btnExportToExcel_Click(object sender, EventArgs e)
{
    Response.Clear();
    Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
    Response.AddHeader("content-disposition", "attachment;  filename=ExcelDemo.xlsx");
    Response.BinaryWrite(ExcelHelper.GetByteArray(datatable));
    Response.End();
}

答案 1 :(得分:1)

这是您网页上发生的事情:

    单击
  1. asp:LinkButton。在客户端点击它会调用__doPostBack,将隐藏的__EVENTTARGET输入值设置为btnExportToExcel

  2. 表单将提交给服务器。浏览器正在等待新内容到达。

  3. 新内容是一个可下载的文件,因此浏览器页面不会被清除并保持提交期间的状态。

  4. 点击包含type="submit"的任何按钮都会导致表单提交时__EVENTTARGET的值仍为btnExportToExcel

  5. 服务器端页面将POST Request.Form["__EVENTTARGET"]="btnExportToExcel"请求解释为点击btnExportToExcel

答案 2 :(得分:-1)

OnServerClick="return false;"添加到按钮标记,以避免回发