2008-10-20 33 views
5

Trang thực hiện một số tác vụ và mất nhiều thời gian để xử lý. Chúng tôi muốn cung cấp cho người dùng phản hồi khi từng công việc được hoàn thành.Vui lòng đợi trang trong ASP.NET MVC

Trong ASP.NET webforms chúng tôi sử dụng Response.Flush()

cách gì sẽ bạn một phương pháp này trong ASP.NET MVC?

Trả lời

1

Bạn có thể đặt ở phía khách hàng. Trong mỗi bước, bạn đặt một số biến phiên với bước hiện tại. Sau đó, bạn thực hiện một hành động khác trong bộ điều khiển của bạn gọi là: "GetProgress" và gán một khung nhìn và URI cho nó.

Trong hành động, bạn sẽ kiểm tra phiên này và trả lại tiến độ hiện tại của tác vụ của bạn. Ở phía máy khách, tạo một bộ đếm thời gian (tức là setTimeOut) và bạn gọi URI của hành động điều khiển sau đó mỗi khoảng thời gian cụ thể - 1 giây hoặc lâu hơn. Đó là nó.

1

Me Cá nhân tôi sẽ xem xét hai optoins:

  • chuyển hướng tới trang (s) chờ đợi, sau đó lửa hành động
  • Do đó kiểu ajax
5

Bạn vẫn có thể sử dụng Response.Write() và Response.Flush() đối với bất cứ trạng thái mà bạn muốn gửi xuống dây điện. Hoặc nếu bạn có sự tiến bộ của bạn thingy trong một điều khiển người dùng, bạn có thể làm một cái gì đó như:

this.PartialView("Progress").ExecuteResult(this.ControllerContext); 
this.Response.Flush(); 

từ bộ điều khiển của bạn trong khi hoạt động lâu dài trong phương pháp hành động của bộ điều khiển.

Bạn có thể chọn phương thức này hoặc cách tiếp cận phía máy khách như được đề cập trong các nhận xét ở đây, chỉ muốn chỉ ra rằng phía máy chủ vẫn có thể thực hiện được.

+0

Tôi có một phần xem văn bản "vui lòng chờ ..." và sử dụng cách tiếp cận này. Nhưng văn bản "vui lòng chờ ..." vẫn còn trên trang sau khi mọi thứ được tải. Một cách dễ dàng để xóa nó khi Chế độ xem cuối cùng được trả về từ Phương thức hành động? –

+0

@Frode Lillerud: Một đoạn Javascript loại bỏ "vui lòng chờ" từ trình duyệt DOM hoặc ẩn nó. – liggett78

2

Có hai cách cơ bản:

  1. Thăm dò ý kiến ​​một trang máy chủ đó trả về trạng thái, sau đó một lần hoạt động được thực hiện, chuyển hướng đến một trang kết quả. MVC là không có gì để làm theo cách này, bạn cần phải sử dụng một biến máy chủ để lưu trữ các đối tượng/trạng thái - đây là một cách có liên quan nhiều hơn đến một ứng dụng Asp.NET tiêu chuẩn như bạn (có lẽ) sử dụng các biến phiên vv dù sao.

  2. Cuộc gọi AJAX từ máy khách đến dịch vụ web trên máy chủ. Asp.NET MVC sắp triển khai khung công tác jQuery, vì vậy hãy sử dụng nó để xử lý sự kiện và cuộc gọi của khách hàng cho phản hồi. Điều này sẽ nhiều hơn trong tinh thần của MVC mà không/không nên sử dụng trạng thái phiên v.v.

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