响应对象不在更新面板中返回Excel流?

Jam*_*123 1 javascript vb.net asp.net ajax

我在更新面板中单击按钮时生成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
Run Code Online (Sandbox Code Playgroud)

jba*_*all 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>
Run Code Online (Sandbox Code Playgroud)