Согласно Microsoft элемент управления FileUpload несовместим с AJAX UpdatePanel.
Я знаю, что PostBackTrigger можно добавить к кнопке отправки формы следующим образом:
<Triggers>
<asp:PostBackTrigger ControlID = "Button1" />
</Triggers>
Проблема в том, что это заставляет форму выполнять полную обратную передачу, что в первую очередь лишает смысла использование UpdatePanel. Есть ли способ решения этой проблемы, при котором не обновляется вся страница?





Я знаю сторонний компонент, который может это сделать. Он называется «swfupload», его можно использовать бесплатно, с открытым исходным кодом, а также с помощью javascript и flash, чтобы творить чудеса.
вот список предлагаемых ими функций: (со своего сайта)
- Upload multiple files at once by ctrl/shift-selecting in dialog
- Javascript callbacks on all events
- Get file information before upload starts
- Style upload elements with XHTML and css
- Display information while files are uploading using HTML
- No page reloads necessary
- Works on all platforms/browsers that has Flash support.
- Degrades gracefully to normal HTML upload form if Flash or javascript is unavailable
- Control filesize before upload starts
- Only display chosen filetypes in dialog
- Queue uploads, remove/add files before starting upload
У них также есть демонстрационная зона, где вы можете поиграть с их контролем. Так вы сможете убедиться, что это именно то, что вам нужно.
Мы использовали его в одном из наших проектов, и до сих пор он нас ни разу не подводил, так что я думаю, что это беспроигрышный вариант.
ой и вот страница загрузки: http://code.google.com/p/swfupload/
Вы не можете загружать файлы через AJAX, только перезагружая весь документ HTML. Вам следует использовать iframe, если вы предпочитаете чистый HTML (это более распространено, например, используется WordPress), или что-то еще, например swfupload, предложенное Свеном.
Я обнаружил это на днях, когда столкнулся с той же проблемой: http://vinayakshrestha.wordpress.com/2007/03/13/uploading-files-using-aspnet-ajax-extensions/.
Для моей реализации я поместил iframe в модальное всплывающее окно и добавил кнопку со стилем = "display: none" для обработки закрытия всплывающего окна. В функции javascript, которая отслеживает изменения в iframe, я добавил document.getElementById (""). Click (); для скрытой кнопки.
Добавьте это в свой элемент управления кнопкой:
OnClientClick = "javascript:document.forms[0].encoding = 'multipart/form-data';"
-или же-
Сделайте так, чтобы тег формы страницы выглядел так:
<form id = "form1" runat = "server" enctype = "multipart/form-data">
Попробуйте AJAX AsyncFileUpload. Он работает хорошо, если используется в том случае, когда он предназначен для использования (обрабатывает событие UploadedComplete).
http://www.asp.net/AJAX/AjaxControlToolkit/Samples/AsyncFileUpload/AsyncFileUpload.aspx
Я не знаю, является ли это моим конкретным случаем или нет, но это также возвращает false для .HasFile для меня, когда он находится внутри панели обновлений. Моя работа - использовать тег триггеров, чтобы исключить его, как главный вопрос, но все же использовать элемент управления AsyncFileUpload (который, вероятно, устраняет асинхронный характер). Это с веб-сайта mojoPortal.
Для кнопки, запускающей событие загрузки, свойство UseSubmitBehavior должно иметь значение false:
clsUploadButton.UseSubmitBehavior = False;
Можно использовать IFrame с атрибутом target, который упоминается на странице FileUpload ИЛИ использовать пример JQuery по ссылке Как сделать асинхронную (AJAX) загрузку файлов с помощью iframe?
Я пробовал это - мой элемент управления FileUpload по-прежнему возвращает значение False для свойства .HasFile.