Page_Load或Page_Init

时间:2010-05-19 07:21:55

标签: asp.net time load

让我们用一个非常简单的例子来使用jQuery来激活我们的页面......

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

并在ASP.NET( HTML部分)页面(仅一行)

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

和ASP.NET(代码隐藏)页面

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();
    }
}

我的问题是

应该是

protected void Page_Load(object sender, EventArgs e)

protected void Page_Init(object sender, EventArgs e)

所以我们可以节省几毫秒,因为我们实际上并不需要处理页面的事件,或者Page_Init在调用方法时会缺少某种方法的排序吗?

P.S。目前在这两种方法中都运行良好,但我只是想了解选择一种方法而非另一种方法的来龙去脉

4 个答案:

答案 0 :(得分:11)

基本页面生命周期将回答您的问题全文:http://www.codeproject.com/KB/aspnet/ASPDOTNETPageLifecycle.aspx

alt text

检查同一问题的答案:Page.Request behaviour

答案 1 :(得分:8)

任何一个都可以工作,因为你实际上是通过调用response.Clear()和response.End()来抛弃页面生命周期。从技术上讲,你甚至可以把这些代码放在prerender中,它会起作用。通过访问Response对象,您基本上会越过页面的头部并在中间跨步切断它,这样您就可以执行更简单的任务。

我假设您根本不想要页面生命周期,只想从此页面返回JSON?如果是这样,我强烈建议将其作为通用处理程序(ashx)实现。在这种情况下,您只需在Process方法中使用context.Request [“limit”]和context.Response.Write。这样做的好处是,您没有.NET准备页面类并开始页面生命周期的所有开销,而是使用一个用于您正在执行的任务的文件。

理解页面生命周期很好,如其他答案所示,但实际上你根本就没有使用它,你最好完全离开页面类。

答案 2 :(得分:2)

页面生命周期仅在页面元素(控件)的上下文中具有含义,因此我认为您的案例没有任何差异,因为您的页面中没有任何其他子控件 - 这完全无关紧要。

但这是真正的问题:如果你的页面中没有任何html渲染(只有数据序列化),为什么你选择使用常规.aspx页面?

Web服务是此方案的理想候选者。而且你会惊讶地发现你最终会获得多少性能提升。

答案 3 :(得分:0)

您可以很好地使用Page Init方法。但是,如果您的页面中有控件并且想要访问这些控件的任何属性,那么最好使用Page load事件,但在您的情况下,您不需要使用页面加载事件。

您可以浏览Asp.Net Page Life cycle here以更好地了解要使用的事件。