Объект ответа не возвращает поток Excel в панели обновления? - PullRequest
1 голос
/ 12 октября 2010

Я создаю файл 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

1 Ответ

7 голосов
/ 12 октября 2010

Вы не должны перезаписывать ответ для панели обновления.Как работают панели обновления 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...