【问题标题】:Response Object not returning Excel stream in update Panel?响应对象未在更新面板中返回 Excel 流?
【发布时间】:2011-04-24 00:34:30
【问题描述】:

单击更新面板中的按钮后,我正在生成一个 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

【问题讨论】:

    标签: javascript asp.net vb.net ajax


    【解决方案1】:

    您不应该覆盖更新面板的响应。 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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多