2008-08-30 5 views
17

Secondo Microsoft il controllo FileUpload non è compatibile con un AJAX UpdatePanel.Controllo caricamento file all'interno di un UpdatePanel senza aggiornare l'intera pagina?

Sono consapevole che un PostBackTrigger può essere aggiunto il pulsante di invio del modulo come questo:

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

Il problema è che questa forza il modulo per eseguire un intero post-back, che annulla l'intero punto di utilizzo di UpdatePanel in primo luogo. C'è una soluzione alternativa a questo problema che non causa l'aggiornamento dell'intera pagina?

risposta

8

Conosco un componente di terze parti che può farlo. Si chiama "swfupload" ed è gratuito da usare e open source, e usa javascript e flash per fare la magia.

ecco un elenco delle caratteristiche che essi offrono: (dal loro sito)

  • caricare più file in una sola volta per ctrl/shift-selezione in dialogo
  • Javascript callback su tutti gli eventi
  • Ottieni informazioni sul file prima dell'inizio del caricamento
  • Elementi di caricamento stile con XHTML e css
  • Mostra informazioni whi i file vengono caricati tramite HTML
  • Non è necessario ricaricare la pagina
  • Funziona su tutte le piattaforme/browser che supportano Flash.
  • degrada con grazia alla normalità modulo di upload HTML se Flash o JavaScript è disponibile spazio
  • di controllo prima di caricare inizia
  • mostra solo i tipi di file scelti in dialogo
  • arrivi coda, rimuovere/aggiungere file prima di avviare il caricamento

Hanno anche un demo area dove puoi giocare con il loro controllo. In questo modo puoi essere certo che sia esattamente ciò che desideri.

Lo abbiamo usato in uno dei nostri progetti e non ci ha mai deluso fino ad ora, quindi penso che sia una scommessa sicura.

oh e qui è la pagina di download: http://code.google.com/p/swfupload/

3

Non è possibile caricare file (s) tramite AJAX solo da ricaricare un intero HTML documento. Dovresti utilizzare iframe se preferisci puro HTML (questo è più comune, ad esempio usato da WordPress) o qualcos'altro come swfupload suggerito da Sven.

1

L'ho trovato l'altro giorno in cui mi sono imbattuto nello stesso problema: http://vinayakshrestha.wordpress.com/2007/03/13/uploading-files-using-aspnet-ajax-extensions/.

Per la mia implementazione, ho inserito l'iframe in un popup modale e ho aggiunto un pulsante con style = "display: none" per gestire la chiusura del popup. Nella funzione javascript che controlla la modifica dell'iframe, ho aggiunto document.getElementById ("<% = btnCloseUpload.ClientID%>"). Click(); per il pulsante nascosto.

3

Aggiungi questo al vostro controllo pulsante:

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

oppure

rendere la vostra pagina Modulo tag assomigliare:

<form id="form1" runat="server" enctype="multipart/form-data"> 
+3

Ho provato questo - il mio controllo FileUpload restituisce ancora False per la proprietà .HasFile. –

1

Prova AJAX AsyncFileUpload. Funziona bene se utilizzato nella materia che si intende utilizzare (gestire l'evento UploadedComplete).

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

+0

Non so se è un mio caso specifico o meno, ma restituisce anche false per .HasFile per me quando si trova all'interno di un pannello di aggiornamento. La mia soluzione consiste nell'utilizzare un tag trigger per escluderlo come la domanda in alto, ma utilizzare comunque un controllo AsyncFileUpload (che probabilmente rimuove la natura asincrona). Questo è con un sito web mojoPortal. – TamusJRoyce

-1

Il pulsante che sta provocando l'evento di upload deve avere UseSubmitBehavior proprietà impostata su false:

clsUploadButton.UseSubmitBehavior = False; 
Problemi correlati