2012-03-27 9 views
9

Estoy utilizando la Respuesta para que mi aplicación abra un documento de Word para el usuario. Si el usuario elige guardar el archivo, lo guarda y el archivo se ve como debería cuando lo abres. Si el usuario elige abrir el archivo de inmediato, recibe un error que dice que IE no pudo abrir el archivo. Si eligen 'Reintentar', MS Word muestra un error que dice que no puede encontrar el archivo. A continuación se muestran capturas de pantalla que muestran mi situación. También, aquí está el código que tengo para mostrar el archivo:Error de archivo de descarga de Asp.Net al elegir 'Abrir' en IE9

 this.Context.Response.Clear(); 
     this.Context.Response.ClearContent(); 
     this.Context.Response.ClearHeaders(); 
     this.Context.Response.BufferOutput = true; 
     this.Context.Response.ContentType = "application/msword"; 
     this.Context.Response.AppendHeader("Content-Length", bytes.Length.ToString()); 
     this.Context.Response.AddHeader("Content-Disposition", "attachment; filename=" + "Test Document.doc"); 
     this.Context.Response.BinaryWrite(bytes); 
     this.Context.ApplicationInstance.CompleteRequest(); 

Aquí está la pantalla cuando preguntar al usuario de la descarga: enter image description here

Aquí está la pantalla después de usuario elige 'Abrir' enter image description here

Aquí está la pantalla después de que el usuario elige 'Reintentar'. Esta pantalla viene para MS Word. enter image description here

**** **** EDITAR he encontrado un poco de código en línea que he intentado ensayos y la expedición todavía occures cuando llamo a esta función:

protected void GenerateMsWordDoc() 
    { 
     string strBody = "<html>" + 
      "<body>" + 
       "<div>Your name is: <b>Billy Bob</b></div>" + 
       "<table width='100%' style='background-color:#cfcfcf;'><tr><td>1st Cell body data</td><td>2nd cell body data</td></tr></table>" + 
       "Ms Word document generated successfully." + 
      "</body>" + 
      "</html>"; 
     string fileName = "MsWordSample.doc"; 
     // You can add whatever you want to add as the HTML and it will be generated as Ms Word docs 
     Response.AppendHeader("Content-Type", "application/msword"); 
     Response.AppendHeader ("Content-disposition", "attachment; filename="+ fileName); 
     Response.Write(strBody); 
    } 
+0

¿Qué versión de Word está en uso? – Mike

+0

Microsoft Word 2007 –

+0

¿Styles/Site.css es un CSS de su sitio? en caso afirmativo, ¿verificó el encabezado y el contenido de la respuesta del lado del cliente para ver si no se adjunta nada a la respuesta durante EndRequest? – jbl

Respuesta

1

Se puede publicar la muestra datos que se utilizan? Probé a continuación código en IE9 funciona bien.

this.Context.Response.Clear(); 
this.Context.Response.ClearContent(); 
this.Context.Response.ClearHeaders(); 
this.Context.Response.BufferOutput = true; 
this.Context.Response.ContentType = "application/msword"; 
this.Context.Response.AppendHeader("Content-Length", "12"); 
this.Context.Response.AddHeader("Content-Disposition", "attachment; filename=" + "Test Document.doc"); 
this.Context.Response.BinaryWrite(new byte[] { }); 
this.Context.ApplicationInstance.CompleteRequest(); 

Su código reciente también está trabajando muy bien. Estoy usando IE9. A continuación se presentan detalles de la versión ...

enter image description here

+0

Los datos de muestra son bastante grandes. Es otro documento de Word que se guardó como xml. –

+0

Puede probarlo con datos pequeños y, en caso de que la incidencia persista, los pls comparten los datos. – Pankaj

+0

Lo he probado al abrir MS Word 2007. Guarde un documento en blanco como .xml. Luego leo en ese archivo y almaceno el xml en una cadena.Tome esa cadena, conviértala en binaria haciendo: Byte [] bytes = Encoding.Default.GetBytes (xml); Luego envío esa matriz de bytes para escribir en la Respuesta. El problema todavía ocurre al hacer esto. –

1

Espacios en el parámetro de nombre de archivo de contenido en la disposición han sido conocidos por causar errores en las diferentes versiones de navegadores. Intente adjuntar el nombre de archivo entre comillas dobles:

this.Context.Response.AddHeader("Content-Disposition", "attachment; filename=\"" + "Test Document.doc" + "\""); 
+0

Gracias por la sugerencia, pero esto no solucionó mi problema. –

Cuestiones relacionadas