2012-04-16 5 views
0

На моей странице Aspx у меня есть две кнопки: btnGenerateReceipt предназначен для создания квитанции и btnAddNew для добавления нового получателя. Событие OnClick для btnGenerateReceipt Я генерирую и открываю квитанцию, как показано ниже.Открыть файл в C#

protected void onGenerateReceipt(object sender, EventArgs e) 
    { 
      try 
      { 
        byte[] document = receiptByte; 
        Response.ClearContent(); 
        Response.ClearHeaders(); 
        Response.Buffer = true; 
        Response.ContentType = "application/vnd.ms-word"; 
        Response.AddHeader("content-disposition", "inline;filename=" + "Receipt" + ".doc"); 
        Response.Charset = ""; 
        Response.Cache.SetCacheability(HttpCacheability.NoCache); 
        Response.BinaryWrite(document); 
        //Response.Flush(); 
       } 

      } 
      catch (Exception ex) 
      { 

      } 
      finally 
      { 
       //Response.End(); 
      } 
     } 
    } 

Это открывает диалоговое окно Открыть/Сохранить/Отмена Ниже приведены мои проблемы,

  1. мне нужно слово, чтобы открыть документ автоматически, без диалогового окна.
  2. Функция второго нажатия кнопки не срабатывает после нажатия кнопки btnGenerateReceipt.
  3. Как я могу создать & Открыть файл PDF вместо слова Doc?

Любая идея?

+1

1. Вы пишете код на стороне сервера ... где вы хотите, чтобы открыть документ? Я не вижу никакого кода для этой задачи. Пожалуйста, улучшите образец. – Beachwalker

+0

2.> Моя функция нажатия второй кнопки не срабатывает после нажатия кнопки btnGenerateReceipt. <Где этот код? – Beachwalker

+3

Погода для открытия или просто сохранения (с или без диалогового окна) - это предпочтения пользователя (браузера), и вы не можете заставить его открывать. ИМХО. – Oybek

ответ

4

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

EDIT
Что касается второго вопроса о генерации PDF: Есть много библиотек там для создания PDF-файлов. Однако, если у вас уже есть файл Word, одним из решений будет печать документа Word на принтер PDF и отправка полученного PDF-файла.

Печать документа может быть достигнуто с помощью ShellExecute или Process класса с глаголом print, то вы можете использовать PDF-принтер, как PDF-Creator или BullZip для создания файла PDF.

Это то, что я попробовал вместо «вручную», генерирующего файл PDF.

+0

Спасибо, у вас есть идеи для моего второго вопроса? – Roshe

+0

В какой-то степени вы сможете контролировать, как отображается сообщение. Content-Disposition, если установлено значение inline, будет отображаться в строке и, если установлено вложение, будет запрашивать сохранение в качестве диалога - «http://en.wikipedia.org/wiki/MIME#Content-Disposition». Но он не реализован последовательно во всех браузерах. – Ramesh

+0

Привет Рамеш - Спасибо, мой второй вопрос о том, что моя вторая кнопка на той же странице не срабатывает после того, как я открываю документ успешно, нажав кнопку кулака, могли бы вы предложить какое-либо решение этой проблемы? – Roshe

1

Мне нужно, чтобы документ документа открывался автоматически без диалогового окна.

Для ответа на вопрос с ответом @Thorsten Dittmar.

Моя кнопка второй кнопки не срабатывает после нажатия кнопки btnGenerateReceipt.

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

Как я могу генерировать & Открыть PDF файл вместо слова Doc?

Для получения справки в формате pdf this. используйте iTextSharp как библиотеку для создания pdf, затем экспортируйте/сохраните их в формате pdf.

Ref:ASP.NET 4: HttpResponse open in NEW Browser?

Response.AppendHeader("Content-Disposition", "inline; filename=foo.pdf"); 

Вам необходимо установить Тип содержимого объекта Response и добавьте двоичную форму PDF в заголовке. Увидеть этот пост для деталей: Ref: Opening a PDF File from Asp.net page

private void ReadPdfFile() 
    { 
     string path = @"C:\Swift3D.pdf"; 
     WebClient client = new WebClient(); 
     Byte[] buffer = client.DownloadData(path); 

     if (buffer != null) 
     { 
      Response.ContentType = "application/pdf"; 
      Response.AddHeader("content-length",buffer.Length.ToString()); 
      Response.BinaryWrite(buffer); 
     } 

    } 

Ссылка Ссылки:
ASP.NET 4: HttpResponse open in NEW Browser?
Generate pdf file after retrieving the information
ASP.NET MVC: How can I get the browser to open and display a PDF instead of displaying a download prompt?

+0

Спасибо @Niranjan - Я думаю, что с помощью этого метода я не могу реализовать вторую кнопку. Это так? – Roshe

+0

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

+0

На самом деле у меня есть 3 кнопки подряд. есть еще один для различной реализации, поэтому не может быть одним нажатием одной кнопки. Благодарю. – Roshe

Смежные вопросы