FileUpload управления внутри UpdatePanel без обновления всей страницы?

17

В соответствии с Microsoft элемент управления FileUpload несовместим с AJAX UpdatePanel.

Я знаю, что PostBackTrigger можно добавить в кнопку отправки формы следующим образом:

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

Проблема заключается в том, что это заставляет форму выполнять полный пост-обратно, который в первую очередь устраняет всю проблему использования UpdatePanel. Есть ли обходной путь для этой проблемы, который не вызывает обновление всей страницы?

    
задан JohnMcCon 30.08.2008 в 08:48
источник

7 ответов

8

Я знаю сторонний компонент, который может это сделать. Он называется « swfupload » и может свободно использовать и открывать исходный код и использует javascript и flash для совершения магии.

вот список предлагаемых функций: (со своего сайта)

  
  • Загрузите несколько файлов одновременно с помощью ctrl / shift-select в диалоговом окне
  •   
  • Обратные вызовы Javascript для всех событий
  •   
  • Получить информацию о файлах перед загрузкой
  •   
  • Элементы загрузки стиля с помощью XHTML и css
  •   
  • Отображать информацию во время загрузки файлов с помощью HTML
  •   
  • Не требуется перезагрузка страницы
  •   
  • Работает на всех платформах / браузерах с поддержкой Flash.
  •   
  • Грамотно деформируется в стандартную форму HTML-загрузки, если Flash или javascript   недоступен
  •   
  • Управление файлами перед запуском загрузки
  •   
  • Отображать только выбранные типы файлов в диалоговом окне
  •   
  • Очередь загружает, удаляет / добавляет файлы перед началом загрузки.
  •   

Они также имеют демонстрационную область , где вы можете играть с их контролем. Таким образом, вы можете убедиться, что это именно то, что вы хотите.

Мы использовали его в одном из наших проектов, и он до сих пор не подвел нас, поэтому я думаю, что это безопасная ставка.

oh и вот страница загрузки: Ссылка

    
ответ дан sven 30.08.2008 в 09:16
3

Вы не можете загружать файл (ы) через AJAX , только перезагружая весь документ HTML . Вы должны использовать iframe s, если вы предпочитаете чистый HTML (это более распространено, например, используется WordPress) или что-то еще, например swfupload, предложенное Sven.

    
ответ дан palotasb 31.08.2008 в 15:49
3

Добавьте это в свой кнопочный элемент управления:

OnClientClick="javascript:document.forms[0].encoding = 'multipart/form-data';"

-or-

Сделайте свой тег формы страницы похожим:

<form id="form1" runat="server" enctype="multipart/form-data">
    
ответ дан user10859 20.10.2008 в 09:30
  • Я попробовал это - мой элемент управления FileUpload по-прежнему возвращает False для свойства .HasFile. –  Keith Walton 04.05.2010 в 21:37
1

Я нашел это на днях, когда столкнулся с той же проблемой: Ссылка .

Для моей реализации я помещаю iframe в модальное всплывающее окно и добавил кнопку со стилем="display: none", чтобы обрабатывать закрытие всплывающего окна. В функции javascript, которая следит за изменением iframe, я добавил document.getElementById («& lt;% = btnCloseUpload.ClientID% & gt;»). Click (); для скрытой кнопки.

    
ответ дан weffey 16.09.2008 в 19:38
1

Попробуйте AJAX AsyncFileUpload. Он хорошо работает, если используется в том материале, который предполагается использовать (обрабатывать событие UploadedComplete).

Ссылка

    
ответ дан David Neale 08.02.2010 в 16:55
  • Я не знаю, является ли это конкретным случаем или нет, но это также возвращает false для .HasFile для меня, когда он находится внутри панели обновления. Моя работа - использовать тэг триггеров, чтобы исключить его как главный вопрос, но все же использовать элемент управления AsyncFileUpload (который, вероятно, удаляет асинхронный характер). Это с веб-сайтом mojoPortal. –  TamusJRoyce 20.03.2012 в 14:18
0

Может использовать IFrame атрибут «target», который упоминается на странице FileUpload или использовать пример Jquery в ссылке Как сделать загрузку асинхронного (AJAX) файла с помощью iframe?     

ответ дан Ali 10.09.2013 в 12:26
-1

Кнопка, запускающая событие загрузки, должна иметь свойство UseSubmitBehavior , установленное на false:

clsUploadButton.UseSubmitBehavior = False;
    
ответ дан Houston77mr 02.03.2012 в 18:14