asp.net页面的AutoEventWireup="true"属性设置

来源:互联网 发布:超市软件手机版 编辑:程序博客网 时间:2024/05/21 04:00

我们进行asp.net Web开发时,我们会习惯性的在后台的Page_Load()方法中通过IsPostBack属性的判断加载数据。那么,问题来了,你是如何知道页面加载的时候会执行Page_Load()这个方法呢?你在后台通过委托绑定了?微软通过某些方式替我们处理了?今天我们的就以此为切入点进行进一步讨论。

在进一步讨论之前,我们需要了解页面的一个特殊属性AutoEventWireup。简单来说,这一属性决定了当前页是否自动关联某些特殊事件。 

空洞的文字讨论无意义,我们以熟知的项目来和大家一起了解。





上面是我做的一个登陆页面,在页面第一行的Page命令中,我设置了页面的AutoEventWireup 属性为true。(微软默认已经帮我们设置为true了)

在进一步探究AutoEventWireup 属性之前,我们还需要了解Asp.net的事件模型。

     首先,在浏览器页面触发的事件不能立刻在本地得到处理,而是POST至服务器上,因此,Asp.NET建立了委托(代理)机制。在建立一个事件的同时,建立相应的委托:
private void InitializeComponent()   {        this.mybutton.Click += new System.EventHandler(this.Button1_Click);//委托   }private void Button1_Click(object sender, System.EventArgs e)   {    //事件内容   }

委托将事件与该页面显式关联

简单的了解了asp.net的事件模型,接下来我们就来看下事件模型与页面的AutoEventWireup属性的关系。

在AutoEventWireup="false"时,如果没有委托,事件将不执行。

但,Asp.NET中可以修改AutoEventWireup="true",使页面与某些特殊的事件方法绑定,自动识别这些具有特定名称的事件,而不需要进行委托。到这里,文章开头的问题得到了解决:微软通过AutoEventWireup属性已经帮我们进行了事件与页面的隐式关联。这些特定名称包括:Page_Init, Page_Load, Page_DataBind, Page_PreRender和Page_Unload等。比如:

private void Page_Load(object sender, System.EventArgs e)   {    // 事件内容   }

针对这些事件方法,开发人员可以利用AutoEventWireup属性设置为true该避免编写过多的链接代码。

如果该属性设置为"false",则代码应改为:

private void InitializeComponent()   {        this.mybutton.Click += new System.EventHandler(this.Button1_Click);//委托    this.Load += new System.EventHandler(this.Page_Load);//可以用AutoEventWireup属性避免的委托   }private void Page_Load(object sender, System.EventArgs e)   {    // 事件内容   }private void Button1_Click(object sender, System.EventArgs e)   {    //事件内容   }

总结:

(1)asp.net的事件模型要求通过委托实现页面与后台事件的结合,不论AutoEventWireup设置为true还是false都需要遵循asp.net的事件模型

(2)AutoEventWireup="true" 微软已经帮我们实现了隐式结合,我们不需要显示结合了,那么页面首次加载的时候isPostback=false;会自动执行Page_Load方法 ;触发页面的事件时(如按钮单击),也会先执行Page_Load方法(只是这个时候的isPostback=true),接着再去执行对应的事件

(3)AutoEventWireup=“false” 要求我们自己实现显示结合

(4)大部分情况下,页面不需要关联如此多的特殊事件,会增加额外的操作和系统开销。因此,Microsoft 建议始终将 AutoEventWireup 设置为 FALSE,为什么会这么说呢?简单点来说,我们可以从也页面的后台代码中看出些端倪。微软只为我们实现了Page_Load()方法,并未为我们实现上面列举的那么多关联方法:因为我们很多都用不到。

其次,我们每次通过按钮提交数据的时候都会造成页面的重新加载:会造成Page_Load()方法的再次执行。也就说当我们点击提交按钮时,方法会先执行Page_Load(),然后再执行你绑定的提交事件方法。是不是很繁琐?

(5)通过上面的讲解,我们可以看出AutoEventWireup="true"或“false”与isPostBack的true/false直接相关


参考:Asp.net的事件模型

0 0
原创粉丝点击