微调框未在异步功能C#的模式中显示

时间:2018-08-10 05:09:29

标签: c# asynchronous async-await modal-dialog task


我需要生成月度报告,所以我有模式,在模式内部,用户可以选择要生成的月度报告范围,然后在用户单击“确定”按钮后,微调器应在过程进行中显示。该月)。但是我的微调框没有显示。.

我的HTML-MODAL

                      <div class="modal-dialog">
                        <div class="modal-content">
                            <div class="modal-header">
                                <h4 class="modal-title" style="color: Black">Generate Monthly</h4>
                            </div>
                            <div class="modal-body">
                                <p>

                                </p>                                   
                                <asp:RadioButtonList ID="generateMonthly" runat="server" AutoPostBack="true" OnSelectedIndexChanged="generateMonthly_SelectedIndexChanged"
                                    CssClass="rbGenerate">
                                    <asp:ListItem Text="Jan-April" Value="1" />
                                    <asp:ListItem Text="May - August" Value="2" />
                                    <asp:ListItem Text="Sept - December" Value="3" />
                                </asp:RadioButtonList>                              


                                <div id="divSpinner" align="center" runat="server">
                                    Processing. Please wait.<br />
                                    <br />
                                    <img src="../build/images/loading.gif" alt="" />
                                </div>

                            </div>
                            <div class="modal-footer">
                                <asp:Button ID="btnOK" runat="server" Text="OK" OnClick="saveGenerate" class="btn btn-success" />
                                <asp:Button ID="btnClose" runat="server" Text="Close" OnClick="hideGenerate" class="btn btn-danger" />
                            </div>
                        </div>
                    </div>

我的密码隐藏

public void saveGenerate(object sender, EventArgs e)
{
    Debug.WriteLine("ENTERED saveGenerate n start spinner");
    divSpinner.Visible = true;


    Task task = GenerateReport();
    task.Wait();
     Debug.WriteLine("done");

    Debug.WriteLine("SHOWING THIS AFTER GENERATE_MONTH PROCESS  FINISH");

    divSpinner.Visible = false;
}

生成报告代码

 public async Task GenerateReport()
{
//selected radiobutton(month range)
//executing query - to generate report based on selected month and saved into table
 Debug.WriteLine("Process complete");


 await Task.Delay(1000);
}

我的问题是,微调器没有显示。我试图参考其他答案,但仍然无法正常工作。

1 个答案:

答案 0 :(得分:0)

对于客户端应用程序(例如Winforms或WPF),预期的行为是正确的,尽管这是Web应用程序。 saveGenerate 事件在服务器端处理,仅在请求完成后,结果才作为HTTP响应发送到客户端。这就是为什么您看不到微调器出现在浏览器中的原因。请注意,在服务器上,任务是异步处理的。一种解决方案是在调用服务器之前使用客户端Javascript显示微调器。服务器端解决方案是在显示微调框(Response.Body.Flush)之后立即刷新您的响应。