Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 尝试从asp.net服务器下载文件,并使用UpdatePanel、ProgressTemplate。。但不起作用_C#_Asp.net - Fatal编程技术网

C# 尝试从asp.net服务器下载文件,并使用UpdatePanel、ProgressTemplate。。但不起作用

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

我想在我的程序中做一些动作。 当这些操作运行时,我想告诉客户机这些操作正在进行中。 在这个过程结束后,我想向客户发送这个文件,例如Excel文件。 我尽量减少我的项目,以准确显示问题所在

现在,这是我的问题: 按钮1不工作,而按钮2工作正常,为什么?如何解决这个问题? 也许有更好的解决办法

这是我的aspx客户代码:

<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...});