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

Leave a Comment

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