在提交的POST请求完成时获得通知(如果响应不是HTML)



在我所有的web表单页面的主页上,我设置了一个覆盖层,当表单提交时阻止用户交互,直到浏览器呈现下一页响应:

<script type="text/javascript">
function overlayWhenSubmit() {
document.getElementById('spinnerOverlay').style.display = 'block';
}
//spinnerOverlay has position:fixed and top/bottom/left/right:0
</script>
protected override void OnPreRender(EventArgs e) {
this.ClientScript.RegisterOnSubmitStatement(
typeof(Page), null, "overlayWhenSubmit();"
);
base.OnPreRender(e);
}

这个工作很好,直到我尝试提供文件下载:

public static void DownloadFile(this System.Web.HttpResponse @this, string physicalFilePath) {
@this.ContentType = "application/octet-stream";
@this.AppendHeader("Content-Disposition", $"Attachment; filename="{Path.GetFileName(physicalFilePath)}"");
@this.TransmitFile(physicalFilePath);
}
// ... then in some event handler in my page:
Response.DownloadFile(thePathOfFileToDownload);

文件下载正常,但原始页面一直被覆盖,因此无法使用。

是否有一种方法可以在提交的请求完成时通知页面,以便它可以关闭覆盖?

到目前为止,最接近的事情是尽量不要弹出控件的覆盖,这会导致非html响应:

<script type="text/javascript">
function overlayWhenSubmit() {
if (!document.getElementById('noOverlayWhenSubmit').value)
document.getElementById('spinnerOverlay').style.display = 'block';
document.getElementById('noOverlayWhenSubmit').value = '';
}
function noOverlayWhenSubmit() {
document.getElementById('noOverlayWhenSubmit').value = true;
}
</script>
<input type="hidden" id="noOverlayWhenSubmit" value="" />
<asp:Button runat="server" OnClientClick="noOverlayWhenSubmit()"></asp:Button>

相关内容

最新更新