1

ASP.NET と C# を使用しています。私はpdfを生成し、それをページロードで送信しています

response.TransmitFile(file);

この後、このウィンドウを閉じる必要があります。閉じるための動的スクリプトを作成しようとしましたが、うまくいきませんでした。

ボタンをクリックすると、このコードを使用してウィンドウを開きます。

window.open("Export.aspx?JobNumbers=" + jobnums,'',"resizable=0,scrollbars=0,status=0,height=200,width=500");

export.csのページロードで、itextsharpを使用してpdfを作成しています。次に、これを使用してそれをsndingします。使用して動的にクリックされるボタンのボタンクリックで呼び出されます

            string script = "var btn = document.getElementById('" + Button1.ClientID + "');";
            script += "btn.click();";
            Page.ClientScript.RegisterStartupScript(this.GetType(), "Eport", script, true);

ボタンのonclickイベントです。

           protected void StartExport(object sender, EventArgs e)
           {
            response.Clear();
            response.ContentType = "application/pdf";
            response.AddHeader("content-disposition", "attachment;filename=" + Path.GetFileName(strFilePath));
            response.TransmitFile(strFilePath);
            response.Flush();  
           }

この後、これを使用したため、この export.aspx ウィンドウを閉じる必要があります。

Page.ClientScript.RegisterStartupScript(this.GetType(), "Export", "window.onfocus=function(){window.close();}", true);

HttpContext.Current.Response.Write("<script>window.onfocus=function(){window.close();}</script>");

しかし、うまくいきませんでした。

出来ますか?

4

4 に答える 4

1

次のようなことを試してください。

<script>
    $.get('/call/the/page.aspx'); // Send a request to the page from which you Transmit the file

    window.setTimeOut(function() { window.close(); }, 5000);
</script>

これにより、5秒後にウィンドウが閉じようとし、ダウンロードを開始するのに十分な時間が残ります。

これをページに配置し、ポップアップウィンドウでそのページを開く必要があります。これにより、このスクリプトが実行され、ファイルが要求され、それ自体が閉じられます。

于 2012-12-13T06:26:19.040 に答える
1

body タグ html で、 event unload="window.close()" を設定する必要があります。これは私のために働いた

于 2015-02-11T13:05:14.963 に答える
0

HttpHandler を作成することをお勧めします。

/// <summary>
/// here is your server-side file generator
/// </summary>
public class export : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        // get some id from query string
        string someid = context.Request.QueryString["id"];

        try
        {
            ...

            context.Response.ContentType = "application/pdf";
            context.Response.HeaderEncoding = System.Text.Encoding.UTF8;
            context.Response.ContentEncoding = System.Text.Encoding.UTF8;
            context.Response.AppendHeader("Content-Disposition", "attachment; filename=filename.pdf");

            context.Response.Write(yourPDF); 
            /* or context.Response.WriteFile(...); */

        }
        catch (Exception ex)
        {
            /* exception handling */
        }
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}

Web.config に登録することを忘れないでください。

<system.webServer>
    <handlers>
        <add name="/export_GET" path="/export" verb="GET" type="YourNamespace.export" preCondition="integratedMode,runtimeVersionv4.0" resourceType="Unspecified" />
    </handlers>
</system.webServer>

その後、次のように JavaScript からこのハンドラーを呼び出すだけです。

ExportFile: function () {

    ...

    var url = "http://" + window.location.hostname + ":4433/export?cid=" + id;

    window.open(url);
}

新しいウィンドウを手動で閉じる必要なく、保存ダイアログが表示されます (自動的に閉じます)。

于 2013-06-10T07:01:09.347 に答える
-1

ファイルをダウンロードした結果(ダウンロードしたファイルのリスト/プロンプトを開きますか)の結果としてブラウザによって作成されたウィンドウを閉じることができないことは明らかなので、質問は「初期化されたホスティングページを閉じる方法」だと思います。 PDFを取得」操作。

ページがファイルのダウンロードの完了を知る方法がないため、ダウンロードが完了したかどうかをサーバーに問い合わせる必要がある場合があります(つまり、AJAX erquest)-ダウンロードを追跡するためにサーバー側のコードが必要になります(他のリクエストのためにロックされるため、ダウンロードステータスを保存するためにセッション状態を使用します)。ダウンロードが完了したことを確認したら、ウィンドウを閉じることができます。ユーザーが開いたウィンドウを閉じると、失敗するか、少なくとも「本当に閉じますか」という確認が表示されることに注意してください。

于 2012-12-13T06:29:08.937 に答える