C# 尝试从asp.net服务器下载文件,并使用UpdatePanel、ProgressTemplate。。但不起作用
我想在我的程序中做一些动作。 当这些操作运行时,我想告诉客户机这些操作正在进行中。 在这个过程结束后,我想向客户发送这个文件,例如Excel文件。 我尽量减少我的项目,以准确显示问题所在 现在,这是我的问题: 按钮1不工作,而按钮2工作正常,为什么?如何解决这个问题? 也许有更好的解决办法 这是我的aspx客户代码:C# 尝试从asp.net服务器下载文件,并使用UpdatePanel、ProgressTemplate。。但不起作用,c#,asp.net,C#,Asp.net,我想在我的程序中做一些动作。 当这些操作运行时,我想告诉客户机这些操作正在进行中。 在这个过程结束后,我想向客户发送这个文件,例如Excel文件。 我尽量减少我的项目,以准确显示问题所在 现在,这是我的问题: 按钮1不工作,而按钮2工作正常,为什么?如何解决这个问题? 也许有更好的解决办法 这是我的aspx客户代码: <form id="form1" runat="server"> <asp:ScriptManager ID="ScriptManager1" runat
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server"> </asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Button ID="Button1" runat="server" Height="38px" onclick="Button1_Click" Text="Button" Width="167px" />
</ContentTemplate>
</asp:UpdatePanel>
<asp:UpdateProgress ID="UpdateProgress1" runat="server">
<ProgressTemplate>
The report is creating please wait...
</ProgressTemplate>
</asp:UpdateProgress>
<asp:Button ID="Button2" runat="server" OnClick="Button2_Click" Text="Button" />
</form>
虽然UpdatePanel是一个非常适合的解决方案,但您忽略了提及您也尝试启动文件下载(您在评论中确实提到了一些,但我不清楚您的意思) Button1的问题是因为UpdatePanel不会触发页面的完整回发—它只回发UpdatePanel的内容 根据,您需要触发完整回发: 按如下方式更改UpdatePanel:
<asp:UpdatePanel runat="server" id="UpdatePanel1">
<Triggers>
<asp:PostBackTrigger ControlID="Button1" />
</Triggers>
<ContentTemplate>
...
</ContentTemplate>
</asp:UpdatePanel>
...
这里是我项目中的等待框,它位于一个单独的控件中:
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="WaitingBox.ascx.cs" Inherits="Web_GUI.Controls.WaitingBox" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="asp" %>
<asp:AlwaysVisibleControlExtender ID="AlwaysVisibleControlExtender1"
runat="server" TargetControlID="Panel1" HorizontalSide="Center"
VerticalSide="Middle" HorizontalOffset="150">
</asp:AlwaysVisibleControlExtender>
<asp:Panel ID="Panel1" runat="server" CssClass="waitingBox">
<table>
<tr>
<td>Please wait ...</td>
</tr>
<tr>
<td id="cell_WaitingBox-Panel"><asp:Image ID="imgWaiting" runat="server" ImageUrl="~/Themes/img/loading_animation.gif" /></td>
</tr>
</table>
</asp:Panel>
代码隐藏:
return Json( new { Whatever...});
但是你宁愿尝试调用另一个javascript函数,这样。。。忘记您看到过这一点如果在
按钮1\u单击事件中添加断点,是否达到代码?是。这两者都是从头到尾的,是5秒的等待让它崩溃了吗?你说它不起作用到底发生了什么?(您是否有错误消息,异常,它只是冻结了?)在按钮1上单击它只需等待5秒钟,然后在sendBackToUser()上运行;点击}按钮1,点击完成,什么也没发生,但点击按钮2,当它结束时,让我下载Excelfile@AntoinePelletier我以前也遇到过同样的问题,我相信问题在于UpdatePanel只做了部分回发,所以OP将看到的情况实际上是什么都没有。看起来这个按钮好像没有在AllUpdate面板或asp:UpdatePanel上单击过?很好。它总是首先,非常感谢您在这个案例中所说的话,我看不到“报告正在创建,请稍候…”消息。。顺便说一句,我看到我必须添加ScriptManager.GetCurrent(this.Page).RegisterPostBackControl(Button1);我尝试了使用此代码和不使用…,但在这两种情况下,我都看不到“报告正在创建,请稍候…”消息。。。。您可能需要异步回发来获得所需的所有功能。你的文件至少下载了吗?是的,正在下载。对于你的实际情况来说,可能有点太复杂了。。。我的按钮就在你的例子里?还是怎样我不明白如何把你的例子转换成我的。。。顺便说一句,您对l1之类的想法可以作为文本“报告正在创建,请稍候…”的标签,它将在OnClientClick中运行,并在Thread.sleep do l1.Visible=false之后运行;在OnClickHo中,如果您以我的示例为例,您必须创建一个控制器并将我的第一个代码块(不带标题)粘贴到其中。然后在第一个代码块的头中注册控制器。然后,您所要做的就是将我的第二块代码放在控制器可能导致下载的位置,该框将自动显示,而不会出现客户端事件。是的,这正是我所记得的,如果没有多大帮助,很抱歉。document.getElementById(“”).style.display=“inline”;在这段代码中,我可以在服务器端将其改回style.display=none吗?或者我可以从服务器端运行Javascript吗?
<asp:UpdateProgress ID="UpdateProgress2" runat="server" DisplayAfter="100" AssociatedUpdatePanelID="UpdatePanel1">
<ProgressTemplate>
<MyControls:WaitingBox ID="wb2" runat="server" />
</ProgressTemplate>
</asp:UpdateProgress>
$.ajax({
url: "@Url.Action("create", "Post")",
type: "POST",
contentType: "application/json",
data: JSON.stringify({ model: model})
}).done(function(result){
window.open('@Url.Action("Print", "controler", new { id = Model.id })', '_blank').focus();
});
return Json( new { Whatever...});