Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,857

    Fileupload e updatepanel

    So che l'argomento non è nuovo ma anche guardando negli arretrati e in rete non ne esco:
    Ho un updatepanel che contiene un formview (agganciato a un datasource con i suoi insert/update nella parte aspx) che contiene a sua volta un controllo fileupload.

    Ho 2 problemi:
    Numero 1 - lettura del nomefile per salvataggio dell'info in db
    Nell'evento inserting e updating del datasource lanciavo una funzione che andava a leggere il nome del file ed a valorizzare il parametro per l'insert/update.
    codice:
     Protected Sub nomiallegati(ByVal e As System.Web.UI.WebControls.SqlDataSourceCommandEventArgs, ByVal Optional tor As String = "R")
            Dim nomefile = ""
    .......
            Dim flup As FileUpload = FormView2.FindControl("FileUpload1")
            If flup.HasFile Then
                Dim NomeCompleto = flup.FileName
                Dim Delim1 = InStrRev(NomeCompleto, "/")
                Dim Delim2 = InStrRev(NomeCompleto, "\")
                If Delim1 > Delim2 Then
                    nomefile = Right(NomeCompleto, Len(NomeCompleto) - Delim1)
                Else
                    nomefile = Right(NomeCompleto, Len(NomeCompleto) - Delim2)
                End If
    
                e.Command.Parameters("@rk_allegato").Value = Trim(Right(nomefile, 100))
                
            End If
        End Sub
    Grazie all'updatepanel il mio fileupload risulta non avere mai files (hasfiles è sempre false).
    In rete ho trovato di tutto e ho anche provato tutto ma senza capirci niente.
    Ho letto che il form dev'essere di tipo multipart-formdata perciò nel load di pagina ho aggiunto
    Page.Form.Attributes.Add("enctype", "multipart/form-data")
    .... senza risultati.
    Poi ho letto che il controllo dev'essere aggiunto ai triggers dell'updatepanel (ma perchè poi?) e allora ho aggiunto anche
    fupl = FormView2.FindControl("FileUpload1")
    ScriptManager.GetCurrent(Me).RegisterPostBackContr ol(fupl)
    ma questo oltre a non dare risultati mi porta un eccezione più o meno così
    Control with ID 'FileUpload1' being registered through RegisterAsyncPostBackControl or RegisterPostBackControl must implement either INamingContainer, IPostBackDataHandler, or IPostBackEventHandler.
    Insomma sono ancora al palo e non riesco a tirar fuori il nome del file indicato nel fileupload... mi serve vs graditissimo aiuto.

    Numero 2 - caricamento del file
    Non so se risolvendo il problema 1 si risolva anche questo comunque la mia tecnica era di fare l'insert/update dei dati del formview e poi, negli eventi inserted e updated del datasource, lanciare la funzione seguente che fisicamente carica i files sul server
    codice:
       Protected Sub caricafile(ByVal conto As String, ByVal codice As String, ByVal Optional tor As String = "R")
    ...........
            'prendo i file allegati e li carico nella apposita directory
            Try
                Dim hfc As HttpFileCollection = Request.Files
                For i As Integer = 0 To hfc.Count - 1
                    Dim hpf As HttpPostedFile = hfc(i)
                    If hpf.ContentLength > 0 Then
                        hpf.SaveAs(ConfigurationManager.AppSettings("uplpath") & Path.GetFileName(hpf.FileName))
                    End If
                Next
    
            Catch ex As Exception
                ' Handle your exception here
            End Try
        End Sub
    Con l'updatepanel il gioco non funziona più perchè i Request.files, guarda un po', sono sempre vuoti... ma dove diavolo vanno a finire??
    Si noti che l'uplaod devo farlo assolutamente dopo aver eseguito l'update/insert.
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  2. #2
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,857
    Per completezza dell'informazione, l'updatepanel è nella masterpage e racchiude il contentplaceholder (so che non andrebbe fatto ma mi va bene così)
    <asp:UpdatePanel ID="MyUpdate2" runat="server" ChildrenAsTriggers="true" >
    <ContentTemplate>


    <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server"> </asp:ContentPlaceHolder>


    </ContentTemplate>
    </asp:UpdatePanel>
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  3. #3
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,857
    Io lo so che a fare le cose senza capirle si perde un sacco di tempo, è che non sempre ho il cervello nella condizione di capire.

    Dopo una efficace spremuta di neuroni ho finalmente metabolizzato che per far funzionare il controllo fileupload bisogna dire all'updatepanel di fare un postback NON asincrono, quindi i bottoni che scatenano il postback devono essere registrati nello scriptmanager come trigger sincroni.
    Era giusta la cosa che avevo letto ma non era il controllo fileupload bensì i button che scatenano il postback a dover essere registrati come postbackcontrol, perciò scrivendo nel page.load
    codice:
    dim butt as button = FormView2.FindControl("button1")
    ScriptManager.GetCurrent(Me).RegisterPostBackControl(butt)
    si è risolto il problema1 e anche il problema2.
    Ora un po' di stress-test sul form e via.
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  4. #4
    Utente di HTML.it L'avatar di cassano
    Registrato dal
    Aug 2004
    Messaggi
    3,000
    Se ricordo bene devi dire all' UpdatePanel di fare un postback completo.

  5. #5
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,857
    Yep
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.