1

画像ボタンのあるページがあります。ユーザーが画像ボタンをクリックすると、サーバーはページの PDF を作成し、ダウンロードを伴う応答がクライアントに送り返されます。問題は、これには時間がかかることです。クライアントの待機をどのように処理できますか?

私の最初の考えは、ローダー GIF を表示するボタンで onClientClick イベントを実行することでした。しかし、応答がいつ終了したかを検出できないため、再び非表示にすることができます。RegisterStartupScriptResponse.Write([script])を使用してみましたが、PDF のResponse.BinaryWrite(buffer)によってすべてオーバーライドされているようです。ファイルはダウンロードされますが、他には何も起こりません。

ダウンロードロジックのみを含む私のコードは次のとおりです。

protected void imgPrint_Click(object sender, ImageClickEventArgs e)
        {
            PDF pdf = new PDF();

            byte[] buffer = pdf.ExportToPDF(Request.QueryString["id"].ToString(), Request.QueryString["mode"].ToString());

            string att = "attachment; filename=" + Request.QueryString["mode"].ToString() + ".pdf";
            Response.ClearContent();
            Response.AddHeader("content-disposition", att);
            Response.ContentType = "application/pdf";
            Response.ContentEncoding = Encoding.Default;
            Response.BinaryWrite(buffer);
        }

そして、現在アラートのみを表示する onClientClick イベントを持つイメージ ボタン:

<asp:ImageButton ID="imgPrint" runat="server" 
                              ImageUrl="~/bilder/skriv_ut.png" Width="45" Height="36" 
                              onclick="imgPrint_Click" OnClientClick="loader(true);" />
4

2 に答える 2

1

Webフォームでは、JqueryとWebserviceを使用できます

function loader(show) {
  if(show)
  {
    //show loading here
  }

       $.ajax({
           type: "POST",
           url: "MyService.asmx/myMethod",
           data: "{}",
           contentType: "application/json; charset=utf-8",
           dataType: "json",
           success: function (data) {
                //do some thing & hide loading
           },
           error: function (data) {
                //do some thing & hide loading
           }
       });
   }
});

[WebService, ScriptService]
public class MyService : WebService
{

    [ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
    public static string myMethod()
    {
        PDF pdf = new PDF();

            byte[] buffer = pdf.ExportToPDF(Request.QueryString["id"].ToString(), Request.QueryString["mode"].ToString());

            string att = "attachment; filename=" + Request.QueryString["mode"].ToString() + ".pdf";
            Response.ClearContent();
            Response.AddHeader("content-disposition", att);
            Response.ContentType = "application/pdf";
            Response.ContentEncoding = Encoding.Default;
            Response.BinaryWrite(buffer);
            return "ok";
    }
}
于 2013-09-26T10:13:03.460 に答える