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 работать.
Ответы
Ответ 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" />
Вы можете проверить здесь.