File upload dall'interno di un UpdatePanel di ASP.NET Ajax 1.0

In ASP.NET 2.0 lavorando con le AJAX Extensions, per effettuare un file upload dall’interno di un UpdatePanel è necessario forzare la pagina ad effettuare un FullPostback, anziche un AsyncPostback, come lo ScriptManager ci farebbe fare automaticamente.

Per ottenere questo, di norma, è sufficiente definire nell’UpdatePanel un PostBackTrigger indicando il nome del controllo interno all’UpdatePanel stesso che deve scatenere un full postback.

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate>
          <asp:FileUpload ID="FileUpload1" runat="server" />
          <asp:Button ID="Button1" runat="server" Text="Button" />
        </ContentTemplate>
        <Triggers>
          <asp:PostBackTrigger ControlID="Button1" />
        </Triggers>
      </asp:UpdatePanel>

Ci sono casi però in cui questo non funziona, o peggio, funziona ad intermittenza, e ci troviamo la proprietà HasFile del controllo FileUpload a false nonostante ne fosse stato selezionato uno.

L’unico workaround che ho trovato è quello di impostare (dichiarativamente o da codice nel PageLoad) la proprietà enctype del form della pagina a “multipart/form-data”; in questo modo tutto funziona bene.

protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);
        this.Form.Enctype = "multipart/form-data";
    }

Published mercoledì 1 agosto 2007 21.04 by marcodelgatto
Filed under: , ,

Comments

# re: File upload dall'interno di un UpdatePanel di ASP.NET Ajax 1.0

martedì 4 dicembre 2007 0.35 by Andrea Cianti
Ciao! Grazie del consiglio. Il tuo suggerimento mi è stato di grandissimo aiuto!

# re: File upload dall'interno di un UpdatePanel di ASP.NET Ajax 1.0

martedì 4 dicembre 2007 8.32 by marcodelgatto

prego! :-)

# re: File upload dall'interno di un UpdatePanel di ASP.NET Ajax 1.0

mercoledì 19 dicembre 2007 12.00 by Franz
ma cmq..nn aggiorna solo 1 parte..aggiorna tutta la pagina....se metti un gridview nel panel con la lista dei file, per aggiornanrlo ti ricarica tutta la pagina....

# re: File upload dall'interno di un UpdatePanel di ASP.NET Ajax 1.0

mercoledì 19 dicembre 2007 12.35 by marcodelgatto

si certo,

 gli upload multipart in javascript credo non si possano proprio fare.

# re: File upload dall'interno di un UpdatePanel di ASP.NET Ajax 1.0

mercoledì 23 gennaio 2008 16.43 by Matteo
La parte di codice del workaround dove va inserita? Per forza a lato client? Oppure va bene anche nell'init della pagina facendo solo: Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load form1.Enctype = "multipart/form-data" End Sub ?

# re: File upload dall'interno di un UpdatePanel di ASP.NET Ajax 1.0

giovedì 24 gennaio 2008 22.37 by marcodelgatto

Certo: l'esempio era in C# e metteva il codice nella:

protected override void OnLoad

che corrisponde alla:

Protected Sub Page_Load

di VB.NET.

m.

# re: File upload dall'interno di un UpdatePanel di ASP.NET Ajax 1.0

martedì 12 maggio 2009 19.21 by MIRI
grazie mille speriamo che funzioni

# re: File upload dall'interno di un UpdatePanel di ASP.NET Ajax 1.0

venerdì 19 novembre 2010 9.50 by Enzo
Grazie mille Marco,col tuo semplice esempio sono riuscito ad implementare il FileUpload sotto ajax,e giusto in tempo poi ;-)

Leave a Comment

(required) 
(required) 
(optional)
(required) 
Powered by Community Server (Commercial Edition), by Telligent Systems