Элемент управления FileUpload внутри UpdatePanel без обновления всей страницы? - PullRequest
18 голосов
/ 30 августа 2008

Согласно Microsoft элемент управления FileUpload не совместим с панелью обновления AJAX.

Мне известно, что PostBackTrigger может быть добавлен к кнопке отправки в форме, подобной этой:

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

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

Ответы [ 7 ]

8 голосов
/ 30 августа 2008

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

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

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

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

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

о, и вот страница загрузки: http://code.google.com/p/swfupload/

3 голосов
/ 20 октября 2008

Добавьте это к кнопке управления:

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

-или-

Сделайте так, чтобы ваш тег формы страницы выглядел так:

<form id="form1" runat="server" enctype="multipart/form-data">
3 голосов
/ 31 августа 2008

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

1 голос
/ 08 февраля 2010

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

http://www.asp.net/AJAX/AjaxControlToolkit/Samples/AsyncFileUpload/AsyncFileUpload.aspx

1 голос
/ 16 сентября 2008

Я нашел это на днях, когда столкнулся с той же проблемой: http://vinayakshrestha.wordpress.com/2007/03/13/uploading-files-using-aspnet-ajax-extensions/.

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

0 голосов
/ 10 сентября 2013

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

0 голосов
/ 02 марта 2012

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

clsUploadButton.UseSubmitBehavior = False;
...