让我们用一个非常简单的例子来使用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。目前在这两种方法中都运行良好,但我只是想了解选择一种方法而非另一种方法的来龙去脉
答案 0 :(得分:11)
基本页面生命周期将回答您的问题全文:http://www.codeproject.com/KB/aspnet/ASPDOTNETPageLifecycle.aspx
检查同一问题的答案: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以更好地了解要使用的事件。