2013-09-06 14 views
9

Ho il controllo FileUpload asp.net all'interno di un pannello di aggiornamento. Quando faccio clic sul pulsante di caricamento, sto leggendo il file per un po 'di codice, se il codice non viene trovato, sto visualizzando ModalPopup per selezionare un utente dal menu a discesa, altrimenti caricare e inviare via email il file all'utente di tale codice (questo codice viene salvato nel database) . Se il codice non viene trovato, la sua visualizzazione di ModalPopup e la rimozione del file selezionato, voglio mantenere il file selezionato dopo il postback. Questo è il mio codiceValore controllo file persistente

<asp:UpdatePanel ID="UpdatePanel3" runat="server" > 
    <ContentTemplate> 
     <asp:FileUpload ID="FileUpload1" runat="server" /> 
     <asp:RequiredFieldValidator ID="rfvFileupload" ValidationGroup="validate" runat="server" ErrorMessage="* required" ControlToValidate="FileUpload1"></asp:RequiredFieldValidator> 
    </ContentTemplate> 
</asp:UpdatePanel> 

e fare clic sul pulsante

protected void btnupload_Click(object sender, EventArgs e) 
{ 
    //Reading the file and Checking from Database 
    if(codefound) 
    { 
     //Sending email to the user of the Code 
    } 
    else 
    { 
     ModalPopupExtender1.Show(); 
    } 
} 

come posso persiste il valore della Carica di controllo sul palo?

risposta

14

Background:: Quando si seleziona un file con FileUpload di controllo, quindi il postback, PostedFile Ottiene inizializzato con HttpPostedFile oggetto per il file. Poiché la richiesta http non può mantenere lo stato, perde lo stato.

NOTA: Il controllo del fileUpload non funziona con il postback asincrono. Per il recupero del file è necessario un postback. Un modo è quello di impostare il trigger per il pulsante Carica, cioè <asp:PostBackTrigger > & NON <asp:AsyncPostBackTrigger>

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional"> 
     <ContentTemplate> 
     <asp:FileUpload ID="fileUploadImage" runat="server"></asp:FileUpload> 
     <asp:Button ID="btnUpload" runat="server" Text="Upload Image" 
      OnClick="btnUpload_Click" /> 
     </ContentTemplate> 
     <Triggers> 
      <asp:PostBackTrigger ControlID="btnUpload" /> 
     </Triggers> 
</asp:UpdatePanel> 

E la tua Carica codice del pulsante:

protected void btnUpload_Click(object sender, EventArgs e) 
    { 
     if (fileUpload1.HasFile) 
     {     
      fileName = fileupload1.FileName; 
      fileUpload1.SaveAs("~/UploadedContent/" + fileName); 
     } 
    } 

a persistere VALORE DI FileUpload CONTROLLO, è possibile memorizzare l'oggetto fileupload nella sessione e dopo il postback recuperano i valori richiesti dalla sessione.

protected void Page_Load(object sender, EventArgs e) 
    { 
     // store the FileUpload object in Session. 
     // "FileUpload1" is the ID of your FileUpload control 
     // This condition occurs for first time you upload a file 
     if (Session["FileUpload1"] == null && FileUpload1.HasFile) 
      { 
      Session["FileUpload1"] = FileUpload1; 
      Label1.Text = FileUpload1.FileName; // get the name 
      } 
     // This condition will occur on next postbacks   
     else if (Session["FileUpload1"] != null && (! FileUpload1.HasFile)) 
      { 
      FileUpload1 = (FileUpload) Session["FileUpload1"]; 
      Label1.Text = FileUpload1.FileName; 
      } 
    // when Session will have File but user want to change the file 
    // i.e. wants to upload a new file using same FileUpload control 
    // so update the session to have the newly uploaded file 
     else if (FileUpload1.HasFile) 
     { 
      Session["FileUpload1"] = FileUpload1; 
      Label1.Text = FileUpload1.FileName; 
     } 
    } 
+1

qui 2 parte della risposta di cui sopra risponde effettivamente il tuo questio: come persistono Vale FileUpload controllo. La prima parte mostra solo come far funzionare il controllo di FileUpload all'interno di UpdatePanel. Dal momento che non hai menzionato alcun problema con questo, spero che questa parte funzioni già per te. –

3

Questo problema è in qualche modo ben documentato, il pannello di aggiornamento è elencato come non funzionante con determinati controlli.

Caricamento file e visualizzazione ad albero 2 dei biggies.

Per farlo funzionare è necessario utilizzare Trigger/PostbackTrigger

<asp:UpdatePanel ID="UpdatePanel3" runat="server" > 
    <ContentTemplate> 
    <asp:FileUpload ID="FileUpload1" runat="server" /> 
    <asp:RequiredFieldValidator ID="rfvFileupload" ValidationGroup="validate" runat="server" ErrorMessage="* required" ControlToValidate="FileUpload1" /> 
    <asp:Buton ID="btnupload" runat="server" Text="Upload" onclick="btnupload_Click"></asp:Button> 
    </ContentTemplate> 

    <Triggers> 
    <asp:PostBackTrigger ControlID="btnupload"/> 
    </Triggers> 
</asp:UpdatePanel> 
+0

Potresti spiegare come usarlo con Trigger/Postback Trigger? – Jono

+0

Si prega di consultare la risposta modificata. – Pawan