我的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使用?
答案 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)
这是您网页上发生的事情:
asp:LinkButton
。在客户端点击它会调用__doPostBack
,将隐藏的__EVENTTARGET
输入值设置为btnExportToExcel
。
表单将提交给服务器。浏览器正在等待新内容到达。
新内容是一个可下载的文件,因此浏览器页面不会被清除并保持提交期间的状态。
点击包含type="submit"
的任何按钮都会导致表单提交时__EVENTTARGET
的值仍为btnExportToExcel
。
服务器端页面将POST
Request.Form["__EVENTTARGET"]="btnExportToExcel"
请求解释为点击btnExportToExcel
。
答案 2 :(得分:-1)
将OnServerClick="return false;"
添加到按钮标记,以避免回发