FileUpload.PostedFile всегда имеет значение null внутри UpdatePanel - PullRequest
12 голосов
/ 07 июня 2011

У меня есть элемент управления FileUpload внутри UpdatePanel.Я успешно зарегистрировал кнопку загрузки в скрипт-менеджере, чтобы выполнить полную обратную передачу.Единственная проблема, которая у меня есть, заключается в том, что FileUpload.HasFile всегда возвращает ноль.Примечание. Когда я перемещаю элемент управления FileUpload за пределы панели обновления, все работает с файлом.Есть ли решение или обходной путь для этого.

Спасибо.

Ответы [ 4 ]

12 голосов
/ 28 февраля 2013

Вы можете поместить элемент управления FileUpload в UpdatePanel, но вы должны использовать PostBackTrigger, а не AsyncPostBackTrigger. Недавно я использовал этот подход и объединил оба типа триггера.

    <Triggers>
        <asp:PostBackTrigger ControlID="btnSave" />
        <asp:AsyncPostBackTrigger ControlID="btnAsyncSave"/>
    </Triggers>

PostBackTrigger использовался для FileUploads, в то время как AsyncPostBackTrigger использовался для всех остальных полей формы.

5 голосов
/ 22 сентября 2011

FileUpload не работает внутри UpdatePanel. Вы должны использовать AsyncFileUpload из набора инструментов управления ASPNET AJAX.


Когда вы используете AsyncFileUpload, вы должны установить правильные параметры в теге form , который находится на вашей странице или главной странице:

<form id="form1" runat="server" enctype="multipart/form-data" method="post">

Если вы не установите правильный enctype и метод UploadedComplete никогда не будет запускать , и вы не сможете получить FileUpload.FileBytes , начиная с FileUpload.HasFile возвращает true только во время выполнения UploadedComplete.


Кроме того, предыдущие версии AsyncFileUpload не работали в Chrome. Актуальная версия (4.1.50731.0) решила проблему.

4 голосов
/ 22 сентября 2011

Это старая проблема, восходящая к MSAjax 1.0. Элемент управления FileUpload несовместим с работой панелей обновления и диспетчера сценариев. Загрузка файла изменяет поток данных, заставляя диспетчер сценария задыхаться. Единственный способ, которым он будет работать, - это установить элемент управления загрузкой файлов за пределы панели обновления. Если у вас есть другие элементы управления на странице, которые зависят от элемента управления загрузкой файлов, вам необходимо установить триггер добавления PostBack.

1 голос
/ 18 февраля 2015
<Triggers>
        <asp:PostBackTrigger ControlID="btnSave" />
</Triggers>

имеет элемент управления загрузкой файлов вне панели обновления.Если у вас есть другие элементы управления на странице, которые зависят от элемента управления загрузкой файлов, вам необходимо установить триггер добавления PostBack.

...