страница ссылки asp.net обновляет страницу после загрузки pdf

0

процесс:

  1. Пользователь открывает веб-страницу, содержащую asp:LinkButton (скачать) и asp:Button (далее).
  2. "next" отключен.
  3. Пользователь нажимает "скачать". PDF файл создается в памяти и выдается как загрузка.

Нужно: включить "next"

Проблема:

  1. не может загружаться с помощью javascript - должен быть серверным
  2. не может влиять на элементы на веб-странице, используя серверную сторону без response.redirect
  3. не может выдавать response.redirect, поскольку httpheaders уже выпущены как часть первого шага.

Я могу перейти на новую страницу, используя "next", если она была включена, но я хочу, чтобы она была отключена до тех пор, пока загрузка не будет выполнена.

Некоторые соответствующие коды:

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-идей.

Теги:

2 ответа

0

Я нашел решение, которое прекрасно решает проблему!

  1. поместите содержимое pdf в скрытый iframe на странице.
  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 id="frameEnvelope" class="pdfIframe" src="Documents/Envelope.aspx"></iframe>
<iframe id="frameEnvelopeTemplate" class="pdfIframe" src="Documents/EnvelopeTemplate.aspx"></iframe>

Вот Css

 .pdfIframe
 {
     display: none;
 }

Вот javascript

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");
         });
     });
  • 1
    Очень приятно, поздравляю
0

Я могу перейти на новую страницу, используя "next", если она была включена, но я хочу, чтобы она была отключена до тех пор, пока загрузка не будет выполнена

Извините, это просто невозможно. Невозможно отслеживать ход загрузки и принимать меры, когда оно будет завершено, если вы не напишете собственный механизм обработчика загрузки. Браузеры не раскрывают ход загрузки на все, к чему может обратиться скрипт на вашей странице.

  • 0
    возможно я был неясен. Я действительно имею в виду - как только человек нажал на ссылку для скачивания. Даже если есть ошибка. Но httpheaders были написаны для загрузки, и это больше не повторится.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню