2010-03-02 26 views

Trả lời

14

Bạn có thể sử dụng tích hợp sẵn AJAX ASP.NET.

Lựa chọn 1 - sử dụng một dịch vụ web (nếu bạn muốn các chức năng để có thể tái sử dụng):

  • tạo ra một dịch vụ web (.asmx) với [ScriptService] thuộc tính,
  • thêm vào trang của bạn và thêm dịch vụ web vào bộ sưu tập Dịch vụ của mình,
  • sử dụng proxy JavaScript được tạo bởi ScriptManager trong trang yor.

Lựa chọn 2 - Phương pháp trang sử dụng (nếu bạn muốn các chức năng trên một trang duy nhất mà không cần tạo một dịch vụ web):

  • xác định phương pháp tĩnh trong trang của bạn, thêm [WebMethod] gán cho họ,
  • thêm một ScriptManager với EnablePageMethods = "true",
  • sử dụng đối tượng PageMethods để gọi phương thức này từ JavaScript.

Trong cả hai trường hợp, JSON sẽ được sử dụng để truyền dữ liệu.

Dưới đây là một rộng rãi tutorial với một số mẫu mã.

Tuy nhiên, ASP.NET AJAX thường bị đổ lỗi vì không hiệu quả - ví dụ, JS nó tạo ra có xu hướng khá lớn. Vì vậy, nếu bạn quan tâm đến hiệu suất, bạn muốn kiểm tra kỹ lưỡng.

Bạn cũng có thể có một cái nhìn tại thread này: .NET AJAX Calls to ASMX or ASPX or ASHX?

+0

Trang phương pháp là giải pháp. – ProfK

2

Sử dụng trình xử lý web chung. tức là ashx. Đây thậm chí còn nhanh hơn các hành động MVC.

2
+0

Về lý thuyết nó có thể. Tuy nhiên, trong thực tế sử dụng, bạn có thể gặp vấn đề khóa phiên: mọi yêu cầu từ trang biểu mẫu web được liên kết với phiên người dùng theo mặc định, do đó bạn chỉ có thể thực hiện yêu cầu ajax một lần.Nó có thể hoặc có thể không quan trọng đối với dự án của bạn –

+1

Bạn có thể sử dụng phiên chỉ đọc cho hầu hết các yêu cầu và đọc-ghi để đăng nhập/đăng xuất. Nó ngăn chặn vấn đề khóa. Phiên mặc định không được bật cho API Web. Tôi phải gọi phương thức từ Application_PostAuthorizeRequest: HttpContext.Current.SetSessionStateBehavior (SessionStateBehavior.ReadOnly); –

+0

Tôi quan tâm, bởi vì chúng tôi đã cố gắng bao gồm một mô-đun API Web trong một mẫu web ASP.NET kế thừa. Đúng là Web API không có phiên làm việc theo mặc định, nhưng khi nó được kết hợp với Web Form, nó sẽ được thực hiện. Chúng tôi thậm chí có thể đọc thông tin phiên từ yêu cầu API. Trong trường hợp thông thường nó không phải là một vấn đề, cho đến khi chúng tôi có một số cuộc gọi API nặng –

0

phương pháp ưa thích của tôi trong trường hợp này là sử dụng một handler generic web (ashx) và JSON.net http://james.newtonking.com/json

Rất đơn giản, nhanh chóng và nhẹ.

Một ví dụ đơn giản sẽ là:

public void ProcessRequest(HttpContext context) 
{ 
     string jsonOutput = string.Empty; 
     context.Response.ContentType = "application/json"; 
     using (var db = new MyDBContext()) 
     { 
      var dbResult = db.myobject.select(); 
      jsonOutput = Newtonsoft.Json.JsonConvert.SerializeObject(dbResult); 
     } 
     context.Response.Write(jsonOutput); 
} 
Các vấn đề liên quan