2009-04-28 23 views
5

Tôi có chức năng Nhập cho bảng tính Excel trong một ứng dụng. Nó sử dụng điều khiển FileUpload vào lúc này. Tôi tải tệp lên, sau đó chạy một thao tác trên tệp đó. Tôi muốn thông báo cho người dùng về hoạt động đang được thực hiện và phần trăm được thực hiện. Tôi thấy rằng tôi có thể lấy tổng số hàng mà tôi trích xuất từ ​​bảng tính Excel và liên tục phân chia khi tôi chèn từng bản ghi vào cơ sở dữ liệu và cập nhật thanh tiến trình.Thanh tiến trình AJAX ASP.NET: Cập nhật từ mã đằng sau?

Vấn đề là tôi dường như không thể tìm thấy bất kỳ giải pháp nào cập nhật thanh tiến trình từ Mã phía sau. Tôi đã thử sử dụng Matt Berseth's solution.

Rất hay để xem, nhưng tôi không thể thấy nó hoạt động từ Bộ luật đằng sau. Về mặt lý thuyết, tôi nghĩ rằng việc đặt một giá trị vào một hộp văn bản trên trang, và thiết lập onchange thành một hàm JavaScript để thiết lập phần trăm sẽ hoạt động như một bài kiểm tra, nhưng thậm chí điều đó cũng không cho tôi kết quả mong muốn.

Bất kỳ đề xuất nào về cách thực hiện điều này?

Trả lời

1

Điều bạn nên biết là bạn không thể kiểm tra trạng thái tải lên tệp bằng cách sử dụng kiểm soát Tải lên tệp chuẩn. Những gì bạn có thể làm là tải tệp lên máy chủ và sau đó kết nối với nó bằng ODBC và bắt đầu đọc và chèn dòng trong cơ sở dữ liệu của bạn không đồng bộ (bằng cách thực hiện yêu cầu ajax tới trang hoặc sử dụng dịch vụ tập lệnh).

Theo như thanh tiến trình, bạn chỉ cần sử dụng thanh CSS progres (bạn có thể tìm thấy ví dụ đơn giản tại: http://css-tricks.com/examples/ProgressBars/).

Sau đó, bạn nên xây dựng một dịch vụ kịch bản (sử dụng một serivice web) với một phương pháp mà có thể trở lại tình trạng của sự tiến bộ của bạn từ máy chủ:

* tập tin asmx của bạn nên chứa một cái gì đó như:

[WebMethod] 
public int GetStatus() 
    { 
     int progress = 0; // in percents 
     // your server-side code here 
     return progress; 
    } 

trang aspx của bạn nên chứa một cái gì đó như:

<asp:ScriptManager runat="server" ID="ScriptManager"> 
<Services> 
    <asp:ServiceReference Path="~/services/import.asmx" InlineScript="false" /> 
</Services> 
</asp:ScriptManager> 

Sau đó, bạn sẽ có thể gọi là phương pháp từ JavaScript theo định kỳ (mỗi giây cho examp le, sử dụng setTimeout) và cập nhật chiều rộng thanh tiến trình với đơn giản JavaScript hoặc jQuery:

var tout, service; 

function UpdateStatus() { 
    if (tout != null) 
     clearTimeout(tout); 

    if (service == null) 
     service = new namespace.here.serice_class_here(); 

    service.GetStatus(onSuccess, onFailure);  
} 

function onSuccess(result) { 
    // update the width of the progress with result (the integer value of the progress) 
    progress_bar.style.width = percent + "%";   

    // call the method again 
    tout = setTimeout("UpdateStatus()", 1000); 
} 

function onFailure(error) { 
    alert(error.get_message()); 
} 

Bạn có thể mở rộng chức năng onSuccess JavaScript của bạn và khi sự tiến bộ là đầy đủ (giá trị trả về là 100%) bạn có thể chuyển hướng người dùng đến một trang khác hoặc hiển thị thông tin hoặc nút tùy thuộc vào nhu cầu của bạn.

Tôi hy vọng điều này sẽ hữu ích!

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