AutoEventWireup
Page_PreInit & OnPreInit - whats the difference?
https://forums.asp.net/t/1095903.aspx?Page_PreInit+OnPreInit+whats+the+difference+
The Page_PreInit method is an event handler, but the OnPreInit method is an override.
You can use either of them without a problem.
When the PreInit event is raised in the page lifecycle, ASP.NET calls OnPreInit in the Page class.
Since OnPreInit is virtual, your OnPreInit override is called polymorphically.
It is good practice to call base.OnPreInit (or call the base class on any of the overrides) to ensure the base class has an opportunity to process the event.
Page_PreInit is called automatically if you have AutoEventWireup set to true, which is now set automatically whenever you create a page.
It is simply a handler for the PreInit event. This is an event-based method, as opposed to the object-oriented approach to handling the PreInit event.
I tend to use the Page_Xxx methods rather than the OnXxx overrides because of convention, knowing that they'll be easily recognizable and understood by most ASP.NET developers.
Other than that, don't have a strong opinion one way or the other as to which is best.
AutoEventWireup attribute in Microsoft ASP.NET Web Forms
https://www.codeproject.com/Articles/9429/AutoEventWireup-attribute-in-Microsoft-ASP-NET-Web
Introduction
ASP.NET supports two methods to author pages:
- In-line code
- Code-behind
In-line code is code that is embedded directly within the ASP.NET page. Code-behind refers to code for your ASP.NET page that is contained within a separate class file. This allows a clean separation of your HTML from your presentation logic.
When we use Microsoft Visual Studio .NET to create ASP.NET Web Forms, code-behind pages are the default method. In addition, Visual Studio .NET automatically performs precompilation for us when we build our solution.
A little bit of background
Directives in ASP.NET control the settings and properties of page and user control compilers. They can be included anywhere on a page, although it is standard to place them at the beginning. Directives are used in both .aspx files (ASP.NET pages) and .ascx files (user control pages). ASP.NET pages actually support eight different directives.
@ Page
@ Control
@ Import
@ Implements
@ Register
@ Assembly
@ OutputCache
@ Reference
Page directives are the most commonly used directives, and are used to edit a wide variety of settings that control how the page parser and page compiler work. The following is a list of some of the more commonly used page directive attributes in ASP.NET.
@ Page language="c#" Codebehind="WebForm1.aspx.cs"
AutoEventWireup="false" Inherits="TestWebApp.WebForm1"
Language
indicates the language in which the inline script code within the ASP.NET page is written (the code between<% %>
tags). The value of this attribute can beC#
,VB
, orJS
.Codebehind
indicates the name of the file being used as the code supporting this ASP.NET page. This file should reflect theLanguage
setting; that is, if the language being used is C#, the CodeBehind file should have a .cs extension and be written in C#.Inherits
indicates a qualified class from which this ASP.NET page should inherit. Generally, this will be the name of the class described in the code-behind file.AutoEventWireup
is a Boolean attribute that indicates whether the ASP.NET pages events are auto-wired.
Note: In the above case, ASP.NET compiles the code-behind page on the fly. We have to note that this compilation step only occurs when the code-behind file is updated. Whether the file has been updated or not, well this is detected through a timestamp change.
To get to the Real Thing
The AutoEventWireup
attribute may have a value of true
or false
. When an ASP.NET Web Application is created by using Microsoft Visual Studio .NET, the value of the AutoEventWireup
attribute is set as false
.
We can specify the default value of the AutoEventWireup
attribute in the following locations:
- The Machine.config file.
- The Web.config file.
- Individual Web Forms (.aspx files).
- Web User Controls (.ascx files)
The value of the AutoEventWireup
attribute can be declared in the <pages>
section in the Machine.config file or the Web.config file, as follows:
<configuration> <system.web> <pages autoEventWireup="true|false" /> </system.web> </configuration>
If you make these changes in the Machine.config file, the changes affect all ASP.NET Web Forms on the computer. If you make these changes in the Web.config file, the changes affect only the application that the file belongs to. However, to make changes in the individual Web Form Only, we have to add the AutoEventWireup
attribute to the @ Page
directive, as shown above.
Check out the Code
When we create a new ASP.NET Web Application in Visual Studio .NET, as mentioned earlier, by default, the value of the AutoEventWireup
attribute is set to false
in the .aspx page and event handlers are automatically created. We can find this in the InitializeComponent
method:
this.Load += new System.EventHandler(this.Page_Load);
The best way to see the working of this attribute would be:
- Declare a
string
variablemsg
aspublic
in WebForm1.aspx.cs. - In the HTML section of WebForm1.aspx, enter the following code in the
<Head>
section:Hide Copy Code<% Response.Write(msg); %>
In the
Page_Load
, you could enter a value for the variablemsg
declared.Hide Copy Codemsg= "We are in Page_Load()";
On running the application, you will get the message We are in Page_Load() [hereafter referred to as message]. Note: this is in the default case where the attribute is set to false
.
Now try commenting the event handler code for the Page_Load
in the aspx.cs file; and set the AutoEventWireup
attribute to false
in the .aspx page. On running the application this time, you will not get the message.
Now with the event handler code for the Page_Load
in the aspx.cs file still commented; set the AutoEventWireup
attribute to true
in the .aspx page. On running the application this time, you will get the message.
Reason: In the case where AutoEventWireup
attribute is set to false
(by default), event handlers are automatically required for Page_Load
or Page_Init
. However, when we set the value of the AutoEventWireup
attribute to true
, the ASP.NET runtime does not require events to specify event handlers like Page_Load
or Page_Init
.
A thing to be kept in mind is that the AutoEventWireup
attribute of the Page
directive is set to true
by default for the machine (check out the value of this attribute in the machine.config) but set to false
by default for a .aspx page). So if it is missing, since by default it is true
(i.e., at the machine level), the page framework calls page events automatically, specifically the Page_Init
and Page_Load
methods. In that case, no explicit Handles
clause or delegate is needed.
Performance Issues
We must not set the value of the AutoEventWireup
attribute to true
if performance is a key consideration. If we set the value of the AutoEventWireup
attribute to true
, the ASP.NET page framework must make a call to the CreateDelegate
method for every Web Form (.aspx page), and instead of relying on the automatic hookup, manually override the events from the page.
Credits
The whole thing was really simple but I just thought of posting it online; hope it helps someone. To give credit to where it is due. Most of the information was garnered from different places on the net. I've just complied them together and added a bit of my own to help folks along their way. I was also able to find an article related to this in MSDN Online (Article ID: 317690) but for VB.NET.
UserControl中对应的绑定
对应的方法名字,也是page_load和page_init。名字还是page开始
AutoEventWireup的更多相关文章
- 1.<%@Page%>中的Codebehind、AutoEventWireup、Inherits有何作用?
AutoEventWireup --- 指示是否自动启用页事件. Codebehind --- 指示后台代码文件. Inherits --- 继承类. AutoEventWireup:指示该页的事件是 ...
- ASP.NET中@Page指令中的AutoEventWireup
AutoEventWireup:指示控件的事件是否自动匹配 (Autowire).如果启用事件自动匹配,则为 true:否则为 false.默认值为 true.如果设为false,则事件不可用.有关更 ...
- C# @Page指令中的AutoEventWireup,CodeBehind,Inherits
AutoEventWireup 如果 Page 指令的 AutoEventWireup 属性被设置为 true(或者如果缺少此属性,因为它默认为 true) ,该页框架将自动调用页事件,即 Page_ ...
- AutoEventWireup解释
这一事件聚合了当前页是否自动关联某些特殊事件. 首先,从浏览器页面出发的事件不能立刻在本地得到处理,而是POST至服务器上,因此,asp.net建立了委托(代理)机制.在建立一个事件的同事,建立相应的 ...
- <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Login.aspx.cs" Inherits="Login" %>
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Login.aspx.cs&qu ...
- AutoEventWireup="false"
在 Web 服务器控件中,某些事件(通常是 Click 事件)会导致窗体被回发到服务器.HTML 服务器控件和 Web 服务器控件(如 TextBox 控件)中的更改事件将被捕获,但不会立即导致发送. ...
- ASP.NET_各个币种之间的汇率转换(实时)使用Yahoo汇率。
近期开发支付平台的时候有运用到各国的实时汇率之间的转换问题,于是在往上找了很多相关资料,以下就是一些参考网址: 1.提供API接口的网站:https://www.showapi.com:这个网站有提供 ...
- ASP.NET从零开始学习EF的增删改查
ASP.NET从零开始学习EF的增删改查 最近辞职了,但是离真正的离职还有一段时间,趁着这段空档期,总想着写些东西,想来想去,也不是很明确到底想写个啥,但是闲着也是够 ...
- 如何在ASP.Net创建各种3D图表
我们都知道,图表在ASP.NET技术中是一种特别受欢迎而又很重要的工具.图表是表示数据的图形,一般含有X和Y两个坐标轴.我们可以用折线,柱状,块状来表示数据.通过图表控件,我们即能表示数据又能比较各种 ...
随机推荐
- Java定时器Web(转)
通过定时器进行任务的执行是比较常见的情况,下面的是个简单的示例: 主要借助于监听器和TimerTask和Timer类进行实现,另外spring提供了定时器的高级实现好像是quarts. package ...
- 【前端学习笔记】ajax与php之间的互动
ajax通常会牵扯到跨域问题,所以我们通常的解决方案是,通过ajax将参数传到后台php文件中 在后台通过php文件进行跨域访问api,再将结果返回到ajax响应中.需要注意一下几点: 1.可以通过& ...
- Linux(12):期中架构(4)--- 前端部分:HTTP & Nginx & LNMP架构
HTTP协议概念原理说明 1. 当用户访问一个网站时经历的过程 # ①. 利用DNS服务,将输入的域名解析为相应的IP地址 a 本地主机输入域名后,会查询本地缓存信息和本地hosts b 本地主机会向 ...
- PatentTips - GPU Support for Blending
Graphics processing units (GPUs) are specialized hardware units used to render 2-dimensional (2-D) a ...
- 由String作为方法参数,引起的值传递,引用传递,及StringBuffer
原文引用: http://www.cnblogs.com/zuoxiaolong/p/lang1.html http://www.cnblogs.com/clara/archive/2011/09/1 ...
- elasticsearch入门使用(三) Query DSL
Elasticsearch Reference [6.2] » Query DSL 参考官方文档 :https://www.elastic.co/guide/en/elasticsearch/refe ...
- LeetCode OJ--Implement strStr()
http://oj.leetcode.com/problems/implement-strstr/ 判断一个串是否为另一个串的子串 比较简单的方法,复杂度为O(m*n),另外还可以用KMP时间复杂度为 ...
- unix grep命令的大致实现
用到了strstr(a,b)函数和getline()函数,strstr(a,b)函数看是否能在字符串a中找到字符串b,若找到返回指向,若没找到返回NULL strstr实现可以看:Implement ...
- 若菜acmer感觉自己智商全然被碾压了QAQ~~
题目大意是:输入n,m,给出n*m(n.m<=100)的不是正规的布满棋子的棋盘,求最少改几个棋子能够使得棋盘正规,正规的棋盘必须是每一个相邻的棋子颜色都不同(仅仅有黑白两种,用0,1取代) 比 ...
- 机器学习优化方法总结比较(SGD,Adagrad,Adadelta,Adam,Adamax,Nadam)
SGD: 此处的SGD指mini-batch gradient descent,关于batch gradient descent, stochastic gradient descent, 以及 mi ...