2013-09-06 30 views
9

Tôi có quyền kiểm soát Tệp tin asp.net bên trong bảng điều khiển cập nhật. Khi tôi nhấp vào nút tải lên, tôi đọc tệp cho một số mã, nếu không tìm thấy mã thì tôi sẽ hiển thị ModalPopup để chọn người dùng từ trình đơn thả xuống, nếu không tải lên và gửi tệp qua email tới người dùng của Mã đó (mã này được lưu trong Cơ sở dữ liệu) . Nếu không tìm thấy mã, hiển thị ModalPopup và xóa tệp đã chọn, tôi muốn tiếp tục lưu tệp đã chọn sau khi đăng lại. Đây là mã của tôiGiá trị kiểm soát tải tệp Persist

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

và nhấp chuột lên nút

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

Làm thế nào tôi có thể vẫn còn giá trị của kiểm soát tải về bưu chính trở lại?

Trả lời

14

Bối cảnh:: Khi một tập tin được lựa chọn sử dụng FileUpload Control, sau đó trên postback, PostedFile bất động sản được khởi tạo với HttpPostedFile đối tượng cho tập tin. Vì yêu cầu http không thể duy trì trạng thái, vì vậy nó sẽ xóa trạng thái của nó.

LƯU Ý: Điều khiển tải lên tệp sẽ không hoạt động với postback không đồng bộ. Cần đăng lại để nhận tệp. Một cách là để thiết lập kích hoạt để nút Tải lên tức thì, tức là <asp:PostBackTrigger > & KHÔNG <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> 

Và mã nút Tải lên của bạn:

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

tồn GIÁ TRỊ CỦA FileUpload KIỂM SOÁT, bạn có thể lưu trữ đối tượng fileupload hoàn toàn trong phiên và sau khi postback truy xuất các giá trị bạn yêu cầu từ phiên.

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

phần Dưới đây lần thứ 2 của câu trả lời ở trên thực sự trả lời questio của bạn: Làm thế nào để tồn tại FileUpload kiểm soát thung lũng. Phần đầu tiên chỉ cho thấy làm thế nào để làm cho điều khiển FileUpload hoạt động bên trong UpdatePanel. Vì bạn đã không đề cập đến bất kỳ vấn đề với điều này, tôi hy vọng phần này đang làm việc cho bạn. –

3

Vấn đề này được ghi lại một cách rõ ràng, bảng cập nhật được liệt kê là không hoạt động với các điều khiển nhất định.

Tải lên tệp và chế độ xem dạng cây là 2 trong số các biggies.

Để làm cho nó làm việc bạn nên sử dụng Triggers/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

Bạn có thể giải thích cách sử dụng nó với Trình kích hoạt/Trình kích hoạt đăng lại không? – Jono

+0

Vui lòng xem câu trả lời đã sửa đổi. – Pawan

Các vấn đề liên quan