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

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

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

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
19
0
45 345
7

Ответы 7

Я знаю сторонний компонент, который может это сделать. Он называется «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">

Я пробовал это - мой элемент управления FileUpload по-прежнему возвращает значение False для свойства .HasFile.

Keith Walton 04.05.2010 23:37

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

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

Я не знаю, является ли это моим конкретным случаем или нет, но это также возвращает false для .HasFile для меня, когда он находится внутри панели обновлений. Моя работа - использовать тег триггеров, чтобы исключить его, как главный вопрос, но все же использовать элемент управления AsyncFileUpload (который, вероятно, устраняет асинхронный характер). Это с веб-сайта mojoPortal.

TamusJRoyce 20.03.2012 17:18

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

clsUploadButton.UseSubmitBehavior = False;

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

Другие вопросы по теме