2010-01-21 31 views
16
<asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
       <ContentTemplate> 
         <asp:FileUpload onchange="clickTheButton();" ID="FileUpload1" runat="server" /> 
       </ContentTemplate> 
       <Triggers> 
        <asp:AsyncPostBackTrigger ControlID="Button1" /> 
       </Triggers> 
</asp:UpdatePanel> 

Nút 1 nằm ngoài bảng cập nhật và javascript đó được chạy khi người dùng thêm một tập tin trong hộp tải lên là thế này:FileUpload không hoạt động khi được lồng trong UpdatePanel? C#

function clickTheButton() { 
      document.getElementById('<%= Button1.ClientID %>').click(); 
     } 

Vấn đề là đơn giản. FileUpload1.HasFile == sai. Tôi không biết tại sao đây là, nhưng khi tôi đặt nó trong bảng cập nhật thì nó không còn hoạt động nữa.

Tôi đã thấy một số chủ đề khác về vấn đề này. Nhưng không ai trong số họ trả lời tại sao điều này xảy ra, họ chỉ trỏ đến những thứ bạn có thể tải xuống.

CHỈNH SỬA: Lý do chính khiến tôi muốn làm điều này là tôi có thể nhận được tệp ..Uploading .. Thẻ để bật lên trong khi máy khách đang tải lên máy chủ và khi nó đã hoàn tất, hiển thị nó trong một chuyên gia dữ liệu. Tôi chỉ không thể có được UpdateProgress để làm việc.

Trả lời

14

Về cơ bản, bạn chỉ cần làm cho nút của bạn thực hiện một bài đăng đầy đủ để gửi tệp. Ngoài ra hãy chắc chắn rằng bạn có this.Form.Enctype = "multipart/form-data"; đặt trong mã của bạn hoặc bạn có thể đặt trong trang đó. AsyncPostbacks không làm việc với các tệp vì lý do bảo mật như đã đề cập, không có hack. (Tôi chưa bao giờ có thể làm cho nó hoạt động).

<asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
     <ContentTemplate> 
      <asp:FileUpload onchange="clickTheButton();" ID="FileUpload1" runat="server" /> 
     </ContentTemplate> 
     <Triggers> 
     <asp:PostBackTrigger ControlID="Button1" /> 
     </Triggers> 
</asp:UpdatePanel> 
+0

Tiến trình cập nhật không hoạt động với toàn bộ bài đăng mặc dù phải không? – Jason

+0

Đúng, bạn sẽ không có cách theo dõi tiến trình, ngoại trừ nếu trình duyệt của bạn hiển thị thanh tải trong khi đăng lại, điều này dường như không phải là cách đáng tin cậy trên tất cả các trình duyệt. – jamone

+0

đây là rất cũ, bây giờ chúng tôi có thể postback thông qua js, nhưng làm thế nào? – Adeem

4

Vì mục đích bảo mật, trình duyệt không cho phép bạn đăng tệp qua javascript. Hãy tưởng tượng nếu tôi có thể viết một chút một javascript để gửi không đồng bộ nội dung của thư mục My Documents đến máy chủ của tôi.

Vì vậy, phương pháp javascript-ish của việc đăng biểu mẫu, như XMLHttpRequest được sử dụng bởi UpdatePanel, sẽ không hoạt động.

Bài đăng này mô tả một công việc phù hợp xung quanh nếu bạn đang sử dụng 3,5 SP1. http://geekswithblogs.net/ranganh/archive/2009/10/01/fileupload-in-updatepanel-asp.net-like-gmail.aspx

Và bài đăng này mô tả một vài công việc xung quanh nếu bạn không muốn sử dụng AjaxControlToolkit. http://geekswithblogs.net/ranganh/archive/2008/04/01/file-upload-in-updatepanel-asp.net-ajax.aspx

0

Tải lên tệp sẽ không hoạt động với một phần đăng lại. Vì vậy, chỉ cần thêm dòng này vào tải trang của bạn

ScriptManager.GetCurrent(this).RegisterPostBackControl(this.YourControlID); 

Hoặc sử dụng PostBackTrigger.

<Triggers> 
      <asp:PostBackTrigger ControlID="YourControlID" /> 
</Triggers> 

Hoặc bạn cần điều khiển AsyncFileUpload đặc biệt như được xác định trong Bộ công cụ AjaxControl.

<ajaxToolkit:AsyncFileUpload OnClientUploadError="uploadError" 
    OnClientUploadComplete="uploadComplete" runat="server" 
    ID="AsyncFileUpload1" Width="400px" UploaderStyle="Modern" 
    UploadingBackColor="#CCFFFF" ThrobberID="myThrobber" /> 

Bạn có thể kiểm tra here.

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