FileUpload контролировать внутри UpdatePanel без обновления всей страницы?
В соответствии с Microsoft элемент управления FileUpload несовместим с AJAX UpdatePanel.
Я знаю, что PostBackTrigger можно добавить в кнопку отправки формы следующим образом:
<Triggers>
<asp:PostBackTrigger ControlID="Button1" />
</Triggers>
Проблема заключается в том, что это заставляет форму выполнять полный пост-обратно, который в первую очередь устраняет всю проблему использования UpdatePanel. Есть ли обходной путь для этой проблемы, который не вызывает обновление всей страницы?
Ответы
Ответ 1
Я знаю сторонний компонент, который может это сделать. Он называется "swfupload" и может свободно использовать и открывать исходники и использовать javascript и flash для совершения магии.
вот список предлагаемых функций:
(со своего сайта)
- Загрузите несколько файлов одновременно с помощью ctrl/shift-select в диалоговом окне
- Обратные вызовы Javascript для всех событий
- Получить информацию о файлах перед загрузкой
- Элементы загрузки стиля с помощью XHTML и css
- Отображать информацию во время загрузки файлов с помощью HTML
- Не требуется перезагрузка страницы
- Работает на всех платформах/браузерах с поддержкой Flash.
- Грамотно деформируется в стандартную форму HTML-загрузки, если Flash или javascript недоступен
- Управление файлами перед запуском загрузки
- Отображать только выбранные типы файлов в диалоговом окне
- Очередь загружает, удаляет/добавляет файлы перед началом загрузки.
У них также есть демонстрационная область где вы можете играть с их контролем. Таким образом, вы можете убедиться, что это именно то, что вы хотите.
Мы использовали его в одном из наших проектов, и он до сих пор не подвел нас, поэтому я думаю, что это безопасная ставка.
oh и вот страница загрузки: http://code.google.com/p/swfupload/
Ответ 2
Вы не можете загружать файлы (файлы) через AJAX
только путем перезагрузки целого документа HTML
. Вы должны либо использовать iframe
, если предпочитаете чистый HTML (это более распространено, например, используется WordPress), или что-то еще, например swfupload, предложенное Sven.
Ответ 3
Добавьте это в свой кнопочный элемент управления:
OnClientClick="javascript:document.forms[0].encoding = 'multipart/form-data';"
-or-
Сделайте свой тег формы страницы похожим:
<form id="form1" runat="server" enctype="multipart/form-data">
Ответ 4
Я нашел это на днях, когда столкнулся с той же проблемой: http://vinayakshrestha.wordpress.com/2007/03/13/uploading-files-using-aspnet-ajax-extensions/.
Для моей реализации я помещаю iframe в модальное всплывающее окно и добавил кнопку со стилем = "display: none", чтобы обрабатывать закрытие всплывающего окна. В функции javascript, которая следит за изменением в iframe, я добавил document.getElementById( "<% = btnCloseUpload.ClientID% > " ). Click(); для скрытой кнопки.
Ответ 5
Попробуйте AJAX AsyncFileUpload. Он хорошо работает, если используется в том материале, который предполагается использовать (обрабатывать событие UploadedComplete).
http://www.asp.net/AJAX/AjaxControlToolkit/Samples/AsyncFileUpload/AsyncFileUpload.aspx
Ответ 6
Может использовать IFrame атрибут "target", который упоминается на странице FileUpload или использовать пример Jquery в ссылке
Как сделать загрузку асинхронного (AJAX) файла с помощью iframe?
Ответ 7
Кнопка, запускающая событие загрузки, должна иметь свойство UseSubmitBehavior
, установленное на false:
clsUploadButton.UseSubmitBehavior = False;