Подтвердить что ты не робот

FileUpload не работает при вложенности в UpdatePanel? С#

 <asp:UpdatePanel ID="UpdatePanel1" runat="server">
                <ContentTemplate>
                        <asp:FileUpload onchange="clickTheButton();" ID="FileUpload1" runat="server" />
                </ContentTemplate>
                <Triggers>
                    <asp:AsyncPostBackTrigger ControlID="Button1" />
                </Triggers>
</asp:UpdatePanel>

Кнопка 1 находится за пределами панели обновления, а javascript, который запускается, когда пользователь добавляет файл в поле для загрузки, следующий:

function clickTheButton() {
            document.getElementById('<%= Button1.ClientID %>').click();
        }

Проблема проста. FileUpload1.HasFile == false. Я не знаю, почему это так, но когда я помещаю его в панель обновления, он перестает работать.

Я видел некоторые другие темы. Но никто из них не отвечает, почему это происходит, они просто указывают на то, что вы можете скачать.

EDIT: на самом деле моя основная причина, по которой я хочу сделать это, чтобы я мог получить файл .Uploading File.. Tag, чтобы выскочить, пока клиент загружается на сервер и после его завершения отображает его в информаторе. Я просто не могу заставить UpdateProgress работать.

4b9b3361

Ответ 1

В принципе, вам просто нужно сделать свою кнопку для полной отправки, чтобы отправить файл. Также убедитесь, что у вас есть this.Form.Enctype = "multipart/form-data"; в вашем коде, или вы можете поместить на эту страницу. AsyncPostbacks не работает с файлами по соображениям безопасности, как упоминалось, без хаков. (Я никогда не мог заставить его работать).

 <asp:UpdatePanel ID="UpdatePanel1" runat="server">
      <ContentTemplate>
           <asp:FileUpload onchange="clickTheButton();" ID="FileUpload1" runat="server" />
      </ContentTemplate>
      <Triggers>
         <asp:PostBackTrigger ControlID="Button1" />
      </Triggers>
 </asp:UpdatePanel>

Ответ 2

В целях безопасности браузеры не позволяют отправлять файлы через javascript. Представьте себе, если бы я мог написать немного javascript для асинхронного представления содержимого вашей папки "Мои документы" на мой сервер.

Таким образом, методы javascript-ish размещения формы, такие как XMLHttpRequest, используемые UpdatePanel, не будут работать.

В этом сообщении описывается достойная работа, если вы используете 3.5 SP1. http://geekswithblogs.net/ranganh/archive/2009/10/01/fileupload-in-updatepanel-asp.net-like-gmail.aspx

И этот пост описывает пару работ вокруг, если вы предпочитаете не использовать AjaxControlToolkit. http://geekswithblogs.net/ranganh/archive/2008/04/01/file-upload-in-updatepanel-asp.net-ajax.aspx

Ответ 3

Загрузка файла не будет работать с частичным сообщением. Поэтому просто добавьте эту строку при загрузке страницы

ScriptManager.GetCurrent(this).RegisterPostBackControl(this.YourControlID);

Или используйте PostBackTrigger.

<Triggers>
            <asp:PostBackTrigger ControlID="YourControlID" />
</Triggers>

Или вам нужен специальный элемент управления AsyncFileUpload, как определено в AjaxControl Toolkit.

<ajaxToolkit:AsyncFileUpload OnClientUploadError="uploadError"
     OnClientUploadComplete="uploadComplete" runat="server"
     ID="AsyncFileUpload1" Width="400px" UploaderStyle="Modern"
     UploadingBackColor="#CCFFFF" ThrobberID="myThrobber" />

Вы можете проверить здесь.