2013-09-06 22 views
9

Mam kontrolę asp.net FileUpload wewnątrz panelu aktualizacji. Kiedy klikam przycisk wysyłania, czytam plik dla jakiegoś kodu, jeśli nie znaleziono kodu, to pokazuję ModalPopup do wyboru użytkownika z rozwijanego menu, w przeciwnym razie przesyłam plik i wysyłam go pocztą elektroniczną do użytkownika tego kodu (ten kod jest zapisany w bazie danych) . Jeśli nie znaleziono kodu, jego wyświetlenie ModalPopup i usunięcie wybranego pliku, chcę zachować wybrany plik po wysłaniu z powrotem. To jest mój kodPersist FileUpload Wartość kontrolki

<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> 

i kliknięcia przycisku

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(); 
    } 
} 

Jak mogę utrzymuje wartość Załaduj kontroli na stanowisku z powrotem?

Odpowiedz

14

Tło:: Gdy plik jest wybierane za pomocą FileUpload sterowania, a następnie na odświeżenie strony, PostedFile nieruchomość zostanie zainicjowany z HttpPostedFile obiektu dla pliku. Ponieważ żądanie http nie może utrzymać stanu, więc traci swój stan.

UWAGA: Kontrola FileUpload nie będzie działała z asynchronicznym ogłaszaniem zwrotnym. Aby uzyskać plik, konieczne jest odświeżenie. Jednym ze sposobów jest ustawić wyzwalacze dla przyciskiem Upload, tj <asp:PostBackTrigger > & NIE <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> 

A twój Prześlij kod przycisk:

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

utrzymują WARTOŚĆ FileUpload KONTROLI można przechowywać obiekt fileupload łącznie w sesji i po odświeżeniu strony pobierze wartości, których potrzebujesz od sesji.

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

Tutaj 2-cie część powyższej odpowiedzi rzeczywiście odpowiada na questio: Jak utrzymują vale FileUpload sterowania. Pierwsza część pokazuje, jak sprawić, by kontrola FileUpload działała wewnątrz UpdatePanel. Ponieważ nie wspomniałeś o żadnym problemie z tym, mam nadzieję, że ta część działa już dla Ciebie. –

3

Ten problem jest dość dobrze udokumentowany, panel aktualizacji jest wymieniony jako nie działa z niektórymi elementami sterującymi.

Załadowanie pliku, a widok drzewa to 2 z wielkich.

Aby działać należy użyć wyzwalaczy/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

Czy możesz wyjaśnić, jak używać go z wyzwalaczami/wyzwalaczem zwrotnym? – Jono

+0

Proszę zobaczyć zmodyfikowaną odpowiedź. – Pawan

Powiązane problemy