2013-09-25 3 views
1

Я пытаюсь загрузить файлы изображений с помощью управления загрузкой файлов asp.net внутри панели обновления. Я хочу обработать UpdateProgress, чтобы показать изображение индикатора выполнения, указывающее на прогресс, а также на загрузку файла.UpdateProgress и триггерная секция не работают в панели обновления при реализации асинхронного управления загрузкой файлов

Дело 1: Когда я удаляю триггерную секцию и использую раздел UpdateProgress, процедура выполнения работает нормально, но элемент управления загрузкой файлов не может загрузить мои файлы. [страницы оленьей кожи перезагрузки]

Случай 2: При использовании спускового раздела и удалить раздел UpdateProgress, файл получает загружен, но страница получает перезагружается.

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

То, что я был в это:

.aspx раздел

<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager> 


<asp:UpdateProgress ID="loading" runat="server"> 

<ProgressTemplate> 

<asp:Image ID="Image1" CssClass="loadingGeneral" ImageUrl="../Images/loading(1).gif" AlternateText="Processing" runat="server" /> 

</ProgressTemplate> 

    </asp:UpdateProgress> 

    <asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
     <ContentTemplate> 

    <asp:FileUpload ID="fileUploadForAlbum" multiple="true" CssClass="buttonclass" runat="server" ToolTip="Click to browse image." /> 
    <asp:Button ID="btn_uploadAlbum" runat="server" class="buttonclass" OnClick="btnUploadAlbum_Click" Text="Upload Slider" /> 

    </ContentTemplate> 
     <Triggers> 
      <asp:PostBackTrigger ControlID="btn_uploadAlbum" /> 
     </Triggers> 
     </asp:UpdatePanel> 

.aspx.cs раздел

загрузки файла секция кода нормально и у меня есть используется для реализации индикатора выполнения.

protected void btnUploadAlbum_Click(object sender, EventArgs e) 
{ 
      System.Threading.Thread.Sleep(2000); 
      do something......... 
} 

Заранее спасибо. Любая помощь приветствуется.

+1

Это очень сложная проблема, которая была решена многочисленными сторонними инструментами. Мой выбор для асинхронных загрузок - PlUpload: http://plupload.com/ –

ответ

5

Есть несколько интересных фактов, которые необходимо знать о контроле FileUpload.

1.) Контроль загрузки файлов не работает с асинхронной обратной передачей. Для правильной работы всегда требуется обратная передача. Именно по этой причине вы видите полнотекстовые обратные вызовы.

2.) AsyncPostbackTrigger не поможет здесь, чтобы предотвратить обратную передачу.

MSDN ясно говорит, что:

The FileUpload control is designed to be used only in postback scenarios 
and not in asynchronous postback scenarios during partial-page rendering. 
When you use a FileUpload control inside an UpdatePanel control, the file must 
be uploaded by using a control that is a PostBackTrigger object for the panel 

Это делает, чтобы вывести нашу третью точку:

3.) Мы должны использовать PostBackTrigger сделать FileUpload управления работой с UpdatePanel, который затем собирается иметь полноэкранную обратную передачу.

Ваш вопрос:

What I really want is a fine file upload process that includes UpdateProgress 
to show progress image and strictly with no page loads 

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

  • Он работает в панели Update
  • Вы можете показать изображение загрузки во время загрузки файлов продолжается, используя ThrobberID свойства.
  • Он загружает файл без постбэка
  • Он обеспечивает на стороне клиента и побочные события сервера
  • Существуют различные варианты раскраски для показа загрузки файла. Например, он показывает зеленый цвет, если загрузка выполнена успешно: используйте свойство CompleteBackColor, в противном случае оно отображается красным, если нет неудачной загрузки, используя ErrorBackColor.

На вашей странице .aspx поместите диспетчера сценариев и зарегистрируйте DLL инструментария управления Ajax.

<%@ Register Assembly="AjaxControlToolkit" 
    Namespace="AjaxControlToolkit" TagPrefix="ajaxasyncFU" %> 

Теперь поместите AsyncFileUpload управления:

<ajaxasyncFU:AsyncFileUpload ID="AsyncFileUpload1" runat="server" 
OnClientUploadError="uploadError" OnClientUploadStarted="StartUpload" 
OnClientUploadComplete="UploadComplete" 
CompleteBackColor="Lime" UploaderStyle="Modern" 
ErrorBackColor="Red" ThrobberID="Throbber" 
onuploadedcomplete="AsyncFileUpload1_UploadedComplete" 
UploadingBackColor="#66CCFF" /> 

Есть 3 клиентские события, которые вы можете использовать: OnClientUploadError, OnClientUploadStarted и OnClientUploadComplete

И один на стороне сервера событие: onuploadedcomplete, который называется в асинхронном порядке, таким образом избегая полной обратной передачи страницы. В этом случае сервер обычно мы сохраняем файл:

protected void AsyncFileUpload1_UploadedComplete 
    (object sender, AjaxControlToolkit.AsyncFileUploadEventArgs e) 
{  
    if (AsyncFileUpload1.HasFile) 
    { 
    string strPath = MapPath("~/MyImages/") + Path.GetFileName(e.filename); 
    AsyncFileUpload1.SaveAs(strPath); 
    } 
} 

Проверьте эти 2 ссылки: Link1, Link2 для дальнейшего чтения.

 Смежные вопросы

  • Нет связанных вопросов^_^