2010-05-19 32 views
11

Hãy lấy một ví dụ thực sự đơn giản về việc sử dụng jQuery để ajaxify trang của chúng tôi ...Page_Load hoặc Page_Init

$.load("getOrders.aspx", {limit: 25}, function(data) { 
    // info as JSON is available in the data variable 
}); 

và trong ASP.NET (HTML phần) trang (chỉ có một dòng)

<%@ Page Language="C#" AutoEventWireup="true" 
     CodeFile="getOrders.aspx.cs" Inherits="getOrders" %> 

và trong ASP.NET (Mã Đằng sau) trang

public partial class getOrders : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     string lmt = Request["limit"]; 
     List<Orders> ords = dll.GetOrders(limit); 


     WriteOutput(Newtonsoft.Json.JsonConvert.SerializeObject(ords)); 
    } 

    private void WriteOutput(string s) 
    { 
     Response.Clear(); 
     Response.Write(s); 
     Response.Flush(); 
     Response.End(); 
    } 
} 

câu hỏi của tôi là

nó nên được

protected void Page_Load(object sender, EventArgs e) 

hoặc

protected void Page_Init(object sender, EventArgs e) 

Vì vậy, chúng ta có thể tiết kiệm một số mili giây như chúng ta không thực sự cần để xử lý các sự kiện cho trang, hoặc sẽ Page_Init thiếu một số phân loại của một phương pháp theo thời gian nó được gọi là?

P.S. Hiện nay hoạt động tốt trong cả hai phương pháp, nhưng tôi chỉ muốn hiểu các ins and outs của việc lựa chọn một phương pháp trong

+0

Lưu ý rằng việc sử dụng Page_Init không giúp bạn tiết kiệm bất kỳ mili giây nào so với Page_Load - cả Init và Load là các sự kiện vòng trang chuẩn, vì vậy chi phí để gọi một trong hai sự kiện là giống nhau. –

+1

Trên thực tế cho anh ta cắt nó ra sớm mà không phải là trường hợp, Init là trước đó trong chu kỳ và do đó giết chết nó có tiết kiệm các bước khác, nhưng vẫn còn nhiều hơn để đạt được chỉ đơn giản là đi đến một ashx. – fyjham

+0

@Tim Schneider - Thực ra, bạn nói đúng, tôi đã bỏ lỡ cuộc gọi 'Response.End()'. Có, thực hiện càng sớm càng tốt sẽ cắt vài phần nghìn giây. Bạn cũng phải chuyển sang .ashx tốt hơn là thực hiện tối ưu hóa vi mô như vậy. –

Trả lời

8

Hoặc là một trong hai sẽ làm việc, bởi vì bạn về cơ bản ném ra vòng đời trang bằng cách gọi response.Clear() và response.End(). Về mặt kỹ thuật, bạn thậm chí có thể đi xa như đặt mã đó trong đầu ra và nó sẽ làm việc. Bằng cách truy cập đối tượng Response bạn về cơ bản sẽ đi qua phần đầu của trang và cắt nó ra giữa chừng để bạn có thể thực hiện một nhiệm vụ đơn giản hơn nhiều.

Tôi cho rằng bạn chỉ đơn giản là không muốn vòng đời của trang và chỉ muốn trả về JSON từ trang này? Nếu vậy, tôi khuyên bạn nên thực hiện nó như là một xử lý chung (ashx). Trong trường hợp này, bạn chỉ cần sử dụng context.Request ["limit"] và context.Response.Write trong phương thức Process của bạn. Lợi ích của việc này là bạn không có tất cả các chi phí của .NET chuẩn bị lớp trang và bắt đầu vòng đời của trang và thay vào đó sử dụng tệp dành cho tác vụ bạn đang thực hiện.

Thật tuyệt khi hiểu vòng đời của trang, như được hiển thị trong các câu trả lời khác, nhưng thực tế bạn không sử dụng nó và bạn nên tránh hoàn toàn khỏi lớp trang.

+0

hum ... 'Generic Handler's' một cái gì đó mà tôi sẽ xem xét. ty cho cái nhìn sâu sắc! – balexandre

0

Bạn có thể sử dụng phương pháp Page Init rất tốt. Nhưng nếu bạn có các điều khiển trong trang của mình và muốn truy cập bất kỳ thuộc tính nào của các điều khiển đó thì tốt hơn để sử dụng sự kiện Tải trang, nhưng trong trường hợp của bạn, bạn không cần phải sử dụng sự kiện tải trang.

Bạn có thể xem qua số Asp.Net Page Life cycle here để hiểu rõ hơn sự kiện nào cần sử dụng.

2

Vòng đời trang chỉ có ý nghĩa trong ngữ cảnh của phần tử trang (điều khiển), vì vậy tôi không thấy bất kỳ sự khác biệt nào trong trường hợp của bạn, vì bạn không có bất kỳ điều khiển con nào khác trong trang của bạn - điều này hoàn toàn không liên quan .

Nhưng đây là câu hỏi thực sự: nếu bạn không có bất kỳ kết xuất html nào trong trang của mình (chỉ tuần tự hóa dữ liệu), tại sao bạn chọn làm việc với trang .aspx thông thường?

Dịch vụ web là ứng viên lý tưởng cho trường hợp này. Và bạn sẽ ngạc nhiên về sự cải thiện hiệu suất mà bạn sẽ đạt được trong phần kết thúc.

+1

asmx là một nhức đầu để sử dụng mặc dù jQuery ... đôi khi làm việc tốt, một số khác thì không. Vì vậy, tôi bắt đầu sử dụng phương pháp 'bị tấn công' này. – balexandre

+0

Bạn đã đúng một phần trên trang này. Nhưng nó không phải là vấn đề phía máy chủ - bạn không thể sử dụng Ajax Nhận yêu cầu cho các mặt nạ của Json - nó được lưu trữ bởi trình duyệt. Chi tiết tại đây: http://encosia.com/2008/03/27/using-jquery-to-consume-aspnet-json-web-services/ – ljubomir

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