2010-10-11 3 views
1

Je génère un fichier Excel en cliquant sur un bouton dans un panneau de mise à jour. Il lance une erreur d'analyse. S'il vous plaît voir ci-dessous le code.L'objet de réponse ne renvoie pas le flux Excel dans le panneau de mise à jour?

Si je garde le bouton à l'extérieur du panneau de mise à jour, cela fonctionne correctement. Pourquoi ne fonctionne-t-il pas dans le panneau de mise à jour?

Response.ContentType = "application/vnd.ms-excel" 
Response.AddHeader("Content-Disposition", 
        String.Format("attachment;filename={0}", filename)) 
Response.Clear() 
Response.BinaryWrite(WriteToStream.GetBuffer) 
HttpContext.Current.ApplicationInstance.CompleteRequest() 

Private Function WriteToStream() As MemoryStream 
    'Write the stream data of workbook to the root directory 
    Dim file As MemoryStream = New MemoryStream 
    hssfworkbook.Write(file) 
    Return file 
End Function 

Répondre

7

Vous ne devez pas remplacer la réponse d'un panneau de mise à jour. La façon dont les panneaux de mise à jour ASP fonctionnent, la page entière s'exécute et la partie dans le panneau de mise à jour est tirée de la réponse et envoyée au client (en réponse à une demande XHRequest). Lorsque vous effectuez un Response.BinaryWrite, vous supprimez la sortie standard que le serveur s'attend à pouvoir analyser pour le nouveau balisage qu'il souhaite envoyer. La seule raison pour laquelle le bouton déclenche le panneau de mise à jour est si vous voulez changer le contenu de ce panneau. Sinon, assurez-vous simplement que le bouton n'est pas un déclencheur du panneau. Si le bouton doit rester dans le panneau, ajoutez-le à la section de déclenchement du panneau en tant que PostBackTrigger (notez l'absence de Async sur cela).

.: par exemple

<asp:UpdatePanel ID="somePanel" UpdateMode="Conditional" runat="server"> 
    </ContentTemplate> 
    changing content? 
    <asp:Button id="someButton" Text="click me!" 
       OnClick="someButton_Click" runat="server"> 
    other changing content? 
    </ContentTemplate> 
    <Triggers> 
    <asp:PostBackTrigger ControlID="someButton" /> 
    </Triggers> 
</asp:UpdatePanel> 
+0

Merci beaucoup .. ça marche pour moi. – James123

Questions connexes