- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的问题是,当我从对话框后面的代码调用关闭对话框时,使用引用的 aspx 页面不会关闭。如果我注释代码的响应传输文件部分,则对话框正确关闭,否则下载开始但对话框保持打开状态。如果您有任何建议,请告诉我,谢谢!
ASPX 页面:
<%@ Page Async="true" AsyncTimeout="30" Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
CodeFile="Default.aspx.cs" Inherits="_Default" %>
<%@ Register src="CreateUI.ascx" tagname="CreateUI" tagprefix="uc1" %>
<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
<%--JQuery--%>
<script src="Scripts/jquery-1.3.2.min.js" type="text/javascript"></script>
<script src="Scripts/jquery-ui-1.7.2.custom.min.js" type="text/javascript"></script>
<link href="Styles/jquery-ui-1.10.4.css" rel="stylesheet" type="text/css" />
<script type="text/javascript">
$(document).ready(function () {
$('#jobDone').dialog({
autoOpen: false,
draggable: true,
title: "Job completed",
open: function (type, data) {
$(this).parent().appendTo("form");
}
});
});
function showDialog(id) {
$(function () {
$('#' + id).dialog("open");
return false;
});
}
function closeDialog(id) {
$(function () {
$('#' + id).dialog("close");
return false;
});
}
</script>
</asp:Content>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
<!-- ScriptManager to manage UpdatePanel -->
<asp:ScriptManager ID="mainScriptManager" runat="server"></asp:ScriptManager>
<!-- CreateUI Component -->
<uc1:CreateUI ID="CreateUIForm" runat="server" />
<!-- Hidden Field to pass data -->
<asp:Table ID="TableMain" runat="server" CssClass="table">
<asp:TableRow ID="TableRow1" runat="server">
<asp:TableCell ID="TableCell1" runat="server">
<asp:HiddenField ID="UI_Paths" runat="server" />
</asp:TableCell>
</asp:TableRow>
</asp:Table>
<!-- div linked to Jquery dialog -->
<div id='jobDone'>
<asp:UpdatePanel ID="UpdatePanelDownload" UpdateMode="Conditional" ChildrenAsTriggers="false" runat="server">
<ContentTemplate>
<asp:Label ID="LabelMessage" runat="server" Text="Operation ended successfully, do you want to download the produced files?</br></br>"></asp:Label>
<asp:Button ID="ButtonDownload" runat="server" Text="Yes" Width="50px" onclick="ButtonDownload_Click" />
<asp:Button ID="ButtonNo" runat="server" Text="No" Width="50px" OnClientClick="closeDialog('jobDone'); return false;" />
</ContentTemplate>
</asp:UpdatePanel>
</div>
</asp:Content>
背后的代码:
private void DownloadFile(object uiPaths)
{
UIGEN config = (UIGEN)System.Configuration.ConfigurationManager.GetSection("UIGENGroup/UIGEN");
string toPath = config.sharedPath;
if (!toPath.EndsWith(@"\"))
toPath += @"\";
string[] fileNamePaths = uiPaths.ToString().Split(new char[] { '*' });
string zipName = toPath + DateTime.Now.ToString().Replace("/", "_").Replace(":", "_").Replace(" ", "_") + ".zip";
SharpZipLib.CreateZip(zipName, null, fileNamePaths, SharpZipLib.FolderOffset.LastDirOnly);
try
{
FileInfo file = new FileInfo(zipName);
Response.Clear();
Response.ClearHeaders();
Response.ClearContent();
Response.AddHeader("Content-Disposition", "attachment; filename=\"" + file.Name + "\"");
Response.AddHeader("Content-Length", file.Length.ToString());
Response.ContentType = "application/x-zip-compressed";
Response.Flush();
Response.TransmitFile(file.FullName);
Response.End();
}
catch (System.Exception ex)
{
//To do ...Manage the error
}
//Delete zip from Server Shared Folder
if (File.Exists(zipName))
File.Delete(zipName);
}
protected void ButtonDownload_Click(object sender, EventArgs e)
{
if (Page.IsValid)
{
DownloadFile(UI_Paths.Values);
}
ScriptManager.RegisterClientScriptBlock(this, this.GetType(), UniqueID, "closeDialog('jobDone');", true);
}
最佳答案
我自己找到了解决方案。问题是 Response.End();在执行 ButtonDownload_Click 中的受阻 javascrip 之前结束响应。
我尝试了建议的解决方案(在其他类似的线程中阅读)将 Response.End() 更改为 context.ApplicationInstance.CompleteRequest() 但下载不会以这种方式开始。
所以我删除了:
ScriptManager.RegisterClientScriptBlock(this, this.GetType(), UniqueID, "closeDialog('jobDone');", true);
从 ButtonDownload_Click 中,我修改了 aspx 页面:
<asp:Button ID="ButtonDownload" runat="server" Text="Yes" Width="50px" onclick="ButtonDownload_Click" />
对此:
<asp:Button ID="ButtonDownload" runat="server" Text="Yes" Width="50px" OnClientClick="closeDialog('jobDone');" onclick="ButtonDownload_Click" />
这样,ButtonDownload 会突然从 javascript 关闭对话框,然后执行服务器端 ButtonDownload_Click 来执行下载。
关于c# - jQuery 对话框在 Response.TransmitFile 之后不会从代码隐藏中关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22256209/
TransmitFile 的文档winsock 函数确实说"file"而不是“文件描述符”,所以答案是否定的?如果我不能使用 TransmitFile 通过套接字从管道发送数据,是否可以使用其他一些零
传递的参数是: `C:\Licenses\testfolder\PERSONAL-Wednesday 04 July-0405.txt`,`c2license.txt` 函数是: /// /// S
我正在使用 TransmitFile功能,它正在做一些与我预期不同的事情。 最小的例子: #include int main(void) { WSADATA wsa; SOCKET
在 C# ASP.Net 网站中,将文件传输到我正在使用的客户端 String file_path = Server.MapPath("~/files/"+file_name); HttpContex
我的服务器上或本地主机上有一个文件。我想使用以下代码将其传输给用户: Response.ContentType = "application/pdf"; Respons
我有以下方法可用于在访问页面时下载文件。问题在于它似乎会产生带有附加字节的文件,基于文件类型的文件可能会使其损坏。我有以下方法: Public Class GetImage Inherits
我有许多页面需要支持将数据导出到 Excel 电子表格。我可以很好地生成 Excel 文件,但我正在尝试弄清楚如何抽象出这种行为,以便它可以很容易地从我需要它的所有页面中重用。我目前的想法是使用静态实
所以我有了过去几天一直在玩弄的代码集,我需要从服务器下载一个文件到客户端。这是简单的部分,但我还需要在完成后刷新 GridView 并在警报中显示文件已成功创建,但我发现下载的每种方式都包含一个选择代
我正在使用 Response.TransmitFile 从 Web 服务检索文件。我想从服务器的角度衡量这个过程所花费的时间。 我试过在这个调用之前和之后获取滴答计数,但这显然不能代表传输花费了多长时
我正在尝试通过使用发送一个 xlsx 文件 Response.Clear(); Response.AddHeader("Content-Disposition", "attachment; filen
我必须在我的站点中实现 GEDCOM 导出。 单击导出到 gedcom 时,我的 .net 代码在服务器上创建了一个文件。 然后我需要将它从服务器下载到客户端,并且应该询问用户该文件的保存位置,这意味
如果我还想使用加密,如何获得 sendfile()(在 Linux 上)和 TransmitFile()(在 Windows 上)的好处?是否有任何提供此功能的 Linux 内核模块或 Windows
我有以下代码: try { context.Response.TransmitFile(savedFileName); } catch (Exception ex) { Excepti
我正在尝试使用 Response.TransmitFile() 来提示下载。我已经阅读了很多关于这个问题的帖子,并且我的方法基于 Rick Strahl 的博客 http://www.west-win
下面是有问题的代码,我下载了一个 csv,但是它在底部附加了页面源代码关于如何防止这种情况的任何想法? var priceList = Test();
首先,介绍一下背景 --我正在为个人项目编写一个基本的 FTP 服务器。我目前正在检索文件。我当前的实现如下所示: HANDLE hFile = CreateFile("file.tar.gz", G
我正在为类使用 Winsocket 编写一个小型服务器/客户端文件传输,它基本上可以工作,除了在我收到文件并将其写入我的硬盘后无法在套接字上收到任何更多消息。 传输代码看起来像这样: long
我必须触发用户将大文件下载到网络浏览器,我在其中创建要在服务器上传输的文件,然后立即将其删除。我已经找到了足够多的示例,可以看出我应该使用 Response.TransmitFile 或 Respon
我目前正在使用 HttpResponse 从我的服务器下载文件。我已经有几个函数可用于下载 Excel/Word 文件,但我无法下载我的简单文本文件 (.txt)。 对于文本文件,我基本上是将 Tex
我的问题是,当我从对话框后面的代码调用关闭对话框时,使用引用的 aspx 页面不会关闭。如果我注释代码的响应传输文件部分,则对话框正确关闭,否则下载开始但对话框保持打开状态。如果您有任何建议,请告诉我
我是一名优秀的程序员,十分优秀!