0

プロセス:

  1. asp:LinkButtonユーザーは、 (ダウンロード) とasp:Button(次へ) を含む Web ページを開きます。
  2. 「次へ」は無効です。
  3. ユーザーは「ダウンロード」をクリックします。PDF ファイルはメモリ内に生成され、ダウンロードとして発行されます。

必要: 「次へ」を有効にする

問題:

  1. JavaScript を使用してダウンロードできません - サーバー側である必要があります
  2. response.redirect なしでサーバー側を使用して Web ページの要素に影響を与えることはできません
  3. httpheaders はステップ 1 の一部として既に発行されているため、response.redirect を発行できません。

「次へ」が有効になっている場合は、新しいページに移動できますが、ダウンロードが完了するまで無効にしたいです。

関連するコード:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If SessionHelper.PrintedEnvelope Or SessionHelper.PrintedTemplate Then
            Me.btnNext.Enabled = True
            Me.btnNext.CssClass = "nextButton"
        Else
            Me.btnNext.Enabled = False
        End If
    End Sub

  Protected Sub btnEnvelopeTemplate_Click(sender As Object, e As EventArgs) Handles btnEnvelopeTemplate.Click
        Try
            SessionHelper.PrintedTemplate = True

            Dim m As System.IO.MemoryStream = DeliveryHelper.generateEnvelope(True, "English")
            Dim data As Byte() = m.ToArray


            Response.ClearContent()
            Response.ClearHeaders()
            Response.ContentType = "application/download"
            Response.AppendHeader("Content-Length", data.Length.ToString())
            Response.AppendHeader("Content-Disposition", "attachment; filename=" + "EnvelopeTemplate.pdf")
            Response.AppendHeader("Accept-Ranges", "bytes")
            Response.OutputStream.Write(data, 0, data.Length)
            If Response.IsClientConnected Then
                Response.Flush()
                ' Response.End()
            End If

        Catch ex As Exception
            'stuff here
        End Try


    End Sub

jquery のアイデアも歓迎します。

4

2 に答える 2

0

問題をうまく解決する解決策を見つけました!

  1. ページ上の非表示の iframe に pdf のコンテンツを配置します。
  2. ロード時に次のボタンを無効にしました。
  3. リンクボタンをクリックすると、印刷ダイアログが開き、[次へ] ボタンが再度有効になります。

ここにボタンがあります

 <asp:Button  
      ID="btnNext" 
      runat="server" 
      Text="Next" 
      ClientIDmode = "Static" 
      CssClass="" 
      Enabled="false"
      PostBackURL="[nextpage]"/>

ここにリンクがあります

<asp:LinkButton id="btnEnvelope" ClientIDMode="Static" runat="server" Text="Print your envelope" ToolTip="Click to Open Print Dialog" />

<asp:LinkButton id="btnEnvelopeTemplate" ClientIDMode="Static" runat="server" Text="Print this template" ToolTip="Click to Open Print Dialog" />

ここにiframeがあります

<iframe id="frameEnvelope" class="pdfIframe" src="Documents/Envelope.aspx"></iframe>
<iframe id="frameEnvelopeTemplate" class="pdfIframe" src="Documents/EnvelopeTemplate.aspx"></iframe>

ここにCssがあります

 .pdfIframe
 {
     display: none;
 }

ここにジャバスクリプトがあります

function printFrame(id) {
         var frm = document.getElementById(id).contentWindow;
         frm.focus(); // focus on contentWindow is needed on some ie versions
         frm.print();
         document.getElementById('btnNext').disabled = false;
         return false;
     }

 $(document).ready(function () {
        //....other stuff

         $("#btnEnvelope").click(function () {
             printFrame("frameEnvelope");
         });

         $("#btnEnvelopeTemplate").click(function () {
             printFrame("frameEnvelopeTemplate");
         });
     });
于 2013-10-02T19:48:08.070 に答える