UpdatePanel перестает отвечать на запросы после Response.TransmitFile - PullRequest
0 голосов
/ 09 апреля 2011

У меня есть GridView в UpdatePanel, который показывает список файлов. Одним из столбцов в GridView является кнопка, которая открывает указанный PDF-файл.

<asp:UpdatePanel runat="server" ID="upPurchaseOrder">
    <ContentTemplate>
        <asp:GridView ID="gvPurachaseOrder" runat="server" AutoGenerateColumns="False" DataSourceID="odsPurchaseOrders"
            EnableModelValidation="True" DataKeyNames="PurchaseOrderID,PromotionID"  onrowcreated="gvPurachaseOrder_RowCreated">
            <Columns>
                <%--BoundFields omitted--%>
                <asp:TemplateField ShowHeader="False">
                    <ItemTemplate>
                        <asp:Button ID="btnPurchaseOrderOpen" runat="server" Text="Open" CommandName="Open" 
                            CommandArgument='<%# Eval("FilePath") %>' oncommand="btnPurchaseOrderOpen_Command" />
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
        </asp:GridView>
    </ContentTemplate>
</asp:UpdatePanel>

В событии RowCreated я регистрирую btnPurchaseOrderOpen в качестве элемента управления PostBack, поэтому он вызывает полную обратную передачу.

В обработчике событий кнопки я открываю файл методом Response.TransmitFile.

Response.Clear();
Response.ContentType = GetConentTypeForFile(fi.Extension);
Response.AddHeader("content-disposition", String.Format("attachment;filename={0}", fi.Name));
Response.TransmitFile(fi.FullName);
Response.End();

Моя проблема в том, что после открытия файла (он открывается правильно) UpdatePanel прекращает обновление. Я могу нажимать другие кнопки, и они никогда не отправляют обратно синхронно или асинхронно. У меня такое чувство, что проблема связана с ответом, но я не знаю, как это исправить.

1 Ответ

1 голос
/ 09 апреля 2011

Вы делаете полный пост обратно, но не возвращаете ни одной новой страницы на сервер, так как вы только делаете файл передачи и затем response.end. Это в основном тупик для вашей страницы. Чтобы обойти это, вы можете сделать полную запись обратно в iframe или просто создать прямую ссылку на загружаемый файл, даже если это может быть обработчик Ashx, где вы можете продолжать иметь логику, аналогичную вашей. уже использую.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...