2010-09-09 23 views
5

Estoy exportando una vista de cuadrícula a excel, usando .Net 4.0 en una aplicación web, carga de página y necesidad de generar el archivo y luego la página para ser redirigido a la página de llamadas. Estoy corriendo en problemas porque mi código para exportar a Excel es la siguiente:Redireccionando a otra página después de que Response.End() ha sido llamado en C#

gvSummary.Style.Add("font-size", ".6em"); 
    Response.Clear(); 
    string attachment = "attachment; filename=filename.xls"; 
    Response.ClearContent(); 
    Response.AddHeader("content-disposition", attachment); 
    Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; 
    StringWriter sw = new StringWriter(); 
    HtmlTextWriter htw = new HtmlTextWriter(sw); 
    gvSummary.GridLines = GridLines.Horizontal; 
    gvSummary.RenderControl(htw); 
    Response.Write(sw.ToString()); 
    Response.End(); 

Sé que si pongo el Response.Redirect() antes de la .End(), me redirecciona pero el archivo se nunca se generó, y si pongo el Response.Redirect() después de .End() obtengo el archivo pero no hay redirección.

El código escrito anteriormente funciona bien para generar el archivo, sin embargo, cuando se genera el archivo, sigo atascado al ver mi animación de carga porque no puedo salir de la página. ¿Algunas ideas?

Respuesta

8

Sugiero agregar un encabezado de redirección. Algo como esto:

Response.AddHeader("Refresh", "3; url=index.html"); 

donde 3 es el tiempo de la demora y index.html es la URL que necesita para redirigir a

+0

Dado que el resultado de la solicitud es un archivo xls y no html, ¿realmente funcionará? –

+0

Creo que sí. porque antes que nada HTTP se usa para entregar respuestas. En este caso, el paquete HTTP se ve como un conjunto de encabezados seguido de datos binarios (archivo xls). En algunos casos, además, será necesario establecer el tipo contnt para application/octet-stream, pero depende del tipo de resultado que necesitemos – ILya

+0

No funcionó, cargaría el archivo pero no redirigiría ... – EvanGWatkins

1

El problema es Response.End() enviar los últimos restos de la página a la cliente para completar la solicitud. En su caso, la solicitud contiene el archivo.

Una posible solución es abrir una nueva página para la descarga y mantener el redireccionamiento en la página actual.

0

No se puede hacer tanto abierta así que sería bueno para tratar de establecer el enlace al archivo xls generada en una nueva ventana o como fuente a un iframe

0

En JavaScript:

function refresh() { document.location.reload(true); } 

botón :

<td valign="top" style=" width:100px "> 
<asp:Button runat="server" ID="btnX" Text="X" CssClass="ui-button ui-widget ui-state-default ui-corner-all ui-button-text ui-state-hover" OnClientClick="refresh();" Width="180px" /> 
</td> 
0

he intentado abrir una página separada a través ScriptManager que descargar mi archivo mientras se hace la redirección en mi página original.

Así que he añadido a continuación el código en mi página principal:

string strScript = "<script language='javascript'> window.open('CommonDownload.aspx','Report');</script>"; 
ScriptManager.RegisterStartupScript(Page, this.GetType(), "clientScript", strScript, false); 
Response.Redirect("Page.aspx"); 

Y luego añadí el código de descarga en el método Page_Load de mi página CommonDownload. Pasé parte de la información que necesitaba en la página CommonDownload a través de la sesión.

Cuestiones relacionadas