2008-08-30 17 views
17

Theo Microsoft điều khiển FileUpload không tương thích với AJAX UpdatePanel.Điều khiển FileUpload bên trong UpdatePanel mà không làm mới toàn bộ trang?

Tôi biết rằng một PostBackTrigger thể được thêm vào nút gửi có dạng như thế này:

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

Vấn đề là điều này buộc các hình thức để thực hiện một đầy đủ sau lại mà khoảng trống hiện toàn bộ điểm sử dụng UpdatePanel ngay từ đầu. Có một giải pháp cho vấn đề này không gây ra toàn bộ trang để làm mới?

Trả lời

8

Tôi biết một thành phần của bên thứ ba có thể thực hiện điều đó. Nó được gọi là "swfupload" và là miễn phí để sử dụng và mã nguồn mở, và sử dụng javascript và flash để làm phép thuật.

đây là một danh sách các tính năng mà họ cung cấp: (từ trang web của họ)

  • tải nhiều file cùng một lúc bằng ctrl/shift-lựa chọn trong hộp thoại
  • Javascript callbacks trên tất cả các sự kiện
  • Nhận thông tin tệp trước khi tải lên bắt đầu
  • Phần tử tải lên kiểu với XHTML và css
  • Hiển thị thông tin whi các tệp le đang tải lên bằng cách sử dụng HTML
  • Không cần tải lại trang cần thiết
  • Hoạt động trên tất cả các nền tảng/trình duyệt có hỗ trợ Flash.
  • làm giảm một cách duyên dáng mẫu upload HTML bình thường nếu Flash hoặc javascript đã bị không có sẵn
  • kiểm soát filesize trước khi tải lên bắt đầu
  • Chỉ hiển thị định dạng tập tin được lựa chọn trong hộp thoại
  • cập Queue, xóa/thêm các tập tin trước khi bắt đầu tải lên

Họ cũng có một số demo area nơi bạn có thể chơi xung quanh với sự kiểm soát của họ. Bằng cách đó bạn có thể chắc chắn rằng đó là chính xác những gì bạn muốn.

Chúng tôi sử dụng nó trong một trong các dự án của chúng tôi và nó chưa bao giờ thất bại cho đến nay, vì vậy tôi nghĩ rằng đây là một cược an toàn.

oh và đây là trang download: http://code.google.com/p/swfupload/

3

Bạn không thể tải file (s) thông qua AJAX chỉ bằng cách tải lại một tài liệu toàn HTML. Bạn nên sử dụng iframe s nếu bạn thích HTML thuần túy (điều này phổ biến hơn, ví dụ: được sử dụng bởi WordPress) hoặc một cái gì đó khác như swfupload được đề xuất bởi Sven.

1

Tôi đã tìm thấy điều này vào ngày khác khi tôi gặp sự cố tương tự: http://vinayakshrestha.wordpress.com/2007/03/13/uploading-files-using-aspnet-ajax-extensions/.

Để triển khai, tôi đặt khung nội tuyến trong cửa sổ bật lên phương thức và thêm nút có style = "display: none" để xử lý việc đóng cửa sổ bật lên. Trong hàm javascript mà đồng hồ cho sự thay đổi trong iframe, tôi đã thêm document.getElementById ("<% = btnCloseUpload.ClientID%>"). Click(); cho nút ẩn.

3

Thêm phần này vào nút điều khiển của bạn:

OnClientClick="javascript:document.forms[0].encoding = 'multipart/form-data';" 

-hoặc-

Hãy Mẫu trang thẻ cái nhìn của bạn như:

<form id="form1" runat="server" enctype="multipart/form-data"> 
+3

Tôi đã thử điều này - quyền kiểm soát Tải lên tệp của tôi vẫn trả về Sai cho thuộc tính .HasFile. –

1

Thử AJAX AsyncFileUpload. Nó hoạt động tốt nếu được sử dụng trong vấn đề nó được dự định sẽ được sử dụng (xử lý sự kiện UploadedComplete).

http://www.asp.net/AJAX/AjaxControlToolkit/Samples/AsyncFileUpload/AsyncFileUpload.aspx

+0

Tôi không biết nếu nó là một trường hợp cụ thể của tôi hay không, nhưng điều này cũng trả về false cho .HasFile cho tôi khi nó là bên trong một bảng cập nhật. Công việc của tôi xung quanh là sử dụng thẻ trình kích hoạt để loại trừ nó như câu hỏi hàng đầu, nhưng vẫn sử dụng điều khiển AsyncFileUpload (có thể loại bỏ tính chất không đồng bộ). Đây là trang web mojoPortal. – TamusJRoyce

-1

Nút được kích hoạt sự kiện tải lên cần phải có UseSubmitBehavior sở hữu thiết lập là false:

clsUploadButton.UseSubmitBehavior = False;