2010-10-11 38 views
1

点击更新面板中的按钮即可生成Excel文件。它抛出一个解析错误。请参阅下面的代码。响应对象没有在更新面板中返回Excel流?

如果我将按钮保持在更新面板之外,它工作正常。为什么它不在更新面板中工作?

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 

回答

7

您不应该覆盖更新面板的响应。 ASP更新面板的工作方式,整个页面执行,更新面板中的部分从响应中拉出并发送到客户端(作为对XHRequest的响应)。当您执行Response.BinaryWrite时,您正在消除服务器期望能够解析其想要发送的新标记的标准输出。

使按钮触发更新面板的唯一原因是如果您想更改该面板中的内容。否则,只需确保该按钮不是面板的触发器。如果按钮必须留在面板中,请将其作为PostBackTrigger添加到面板的触发器部分(注意缺少Async)。

例如为:

<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

谢谢你这么多..它为我工作。 – James123 2010-10-12 04:08:00