背景: ボタンのクリックで実行時間の長いクエリがあります。したがって、 updateprogress が呼び出されて、プロセスが進行中であることがユーザーに通知されます。現在、静的データ、つまりラベルを表示しています。
長期実行プロセスが実行されると、予想どおり、udapteprogress のコンテンツがフォアグラウンドに表示され、残りのコンテンツがフリーズします。つまり、レポートの生成が進行中です。ウィンドウを閉じないでください
updateprogress のコンテンツがフォアグラウンドにあるときに、完了率、つまり xx% (例: 10%) を表示したいと思います。
コード: Updateprogress
<asp:UpdateProgress ID="UpdateProgress1" runat="server">
<ProgressTemplate>
<div id="progress">
<asp:Label ID="lblProgress" Text="Report generation is in progress, Please do not close the window" runat="server"></asp:Label>
</div>
</ProgressTemplate>
</asp:UpdateProgress>
ボタン付きの更新パネル
<asp:UpdatePanel ID="upExport" UpdateMode="Always" runat="server">
<ContentTemplate>
<asp:Button ID="btnExport" runat="server" Text="Export"
OnClick="btnExport_Click" />
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="btnExport" EventName="Click"/>
</Triggers>
</asp:UpdatePanel>
サーバー側機能:
protected void btnExport_Click(object sender, EventArgs e)
{
//long running method
}
PS: プロセスが btnExport_Click を実行していて、updateprogress がフォアグラウンドにある間、完了率を表示したいと思います。
失敗した試みで、「btnExport_Click」メソッドでセッション変数を更新して、javascript 経由でアクセスしようとしましたが、失敗しました
更新 1: 長期実行メソッドにいる間に % 値を通信できる方法を知りたいのですが、長期実行メソッドから制御が終了すると、Coz が実行されます。100% 完了し、updateprogress はフォアグラウンドではなくなります。
御時間ありがとうございます:)