2012-04-16 92 views
0

在我的Aspx页面中,我有两个按钮,btnGenerateReceipt用于生成收据,btnAddNew用于添加新的receord。 btnGenerateReceipt的OnClick事件我正在生成并打开收据,如下所示。用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. 我需要的Word文档,而不该对话框自动打开。
  2. 点击btnGenerateReceipt按钮后,我的第二个按钮的点击功能不会触发。
  3. 我该如何生成&打开PDF文件而不是word文档?

任何想法?

+1

1.您正在编写服务器端代码......你想开在哪里该文件?我看不到该任务的任何代码。请改善你的样品。 – Beachwalker 2012-04-16 09:19:23

+0

2.>点击btnGenerateReceipt按钮后,我的第二个按钮的点击功能不会触发<此代码在哪里? – Beachwalker 2012-04-16 09:20:13

+3

打开或保存天气(有或没有对话框)是用户(浏览器)的偏好,您无法强制打开它。恕我直言。 – Oybek 2012-04-16 09:20:17

回答

4

服务器发送的内容由网页浏览器处理。您无法从服务器端代码控制浏览器是否打开,保存或默认询问用户,因为这是浏览器设置。

编辑
至于有关生成PDF的第二个问题:有许多图书馆在那里生成PDF。但是,如果您已准备好Word文件,则一种解决方案是将Word文档打印到PDF打印机并发送生成的PDF。

打印可以使用ShellExecute实现文档或Process类动词print,那么你可以使用像PDF-Creator或一个的BullZip PDF打印机生成PDF文件。

这是我试图代替“手动”生成PDF文件。

+0

谢谢,你对我的第二个问题有什么想法吗? – Roshe 2012-04-16 09:33:57

+0

在某种程度上,您将能够控制消息的显示方式。内容处置如果设置为内联将显示内联,如果设置为附件将提示另存为对话框 - “http://en.wikipedia.org/wiki/MIME#Content-Disposition”。但它并没有在所有浏览器中一致地实现。 – Ramesh 2012-04-16 09:34:26

+0

嗨Ramesh - 谢谢,我的第二个问题是关于我的第二个按钮在同一页上没有点击我的拳头按钮成功打开文档后,将你能够提出任何解决方案,这个问题? – Roshe 2012-04-16 09:38:59

1

我需要单词文档在没有对话框的情况下自动打开。

对于@Thorsten Dittmar答案的答案。

点击btnGenerateReceipt按钮后,我的第二个按钮的点击功能不会触发。

Asp.net使用无状态连接,所以你认为你的书面内容将保留在内存中。我认为它不应该按照我的理解工作。创建响应内容,然后将其写入响应并刷新它。

我该如何生成&打开PDF文件而不是单词Doc?

生成pdf参考this。使用iTextSharp类库来生成pdf,然后将其导出/保存为pdf。

编号:ASP.NET 4: HttpResponse open in NEW Browser?

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

您需要设置响应对象的内容类型,并添加标头中的PDF格式的二进制形式。看到这个职位的详细信息: 编号: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 2012-04-16 10:07:38

+0

是的..你的第一个按钮生成回发,然后你的另一个按钮生成回传。因为我认为它不应该包含另一个按钮的回发之间的数据。把这些放在同一个按钮上。 – 2012-04-16 10:11:09

+0

其实我连续有3个按钮。还有一个用于不同的实现,所以不能在一个按钮中点击。谢谢。 – Roshe 2012-04-16 10:17:56