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

asp.net页面的AutoEventWireup=”true”属性设置1、如果设置AutoEventWireup=”true”,那么页面首次加载的时候isPostback=false;会自动执行Page_Load方法触发页面的事件时(如按钮单击),也会先执行Page_Load方法(只是这个时候的isPostback=true),接着再去执行对应的事件2、如果设置AutoEventWireup=”false”,那么Page_Load方法将不会被执行,触发页面的事

大家好,又见面了,我是你们的朋友全栈君。

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

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

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

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

上面是我做的一个登陆页面,在页面第一行的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的事件模型

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/140265.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 5G 信道一览表

    5G 信道一览表各个地区2.4G及5G信道一览表美洲(FCC)2.412~2.462GHz:11个信道5.15~5.35GHz,5.725~5.825GHz;12个信道中国2.412~2.472GHz:13个信道5.725~5.825GHz:4个信道ETSI2.412~2.472GHz:13个信道5.15~5.35GHz:8个信道5470…

    2022年6月7日
    268
  • Linux常用命令:chmod修改文件权限 777和754

    Linux常用命令:chmod修改文件权限 777和754常用下面这条命令:chmod777 文件或目录示例:chmod 777/etc/squid运行命令后,squid文件夹(目录)的权限就被修改为777(可读可写可执行)。如果是Ubuntu系统,可能需要加上sudo来执行:sudochmod 777/etc/squid故事的开始,都会先留一个悬念。只有程序员能懂的冷笑话系列中,有个比较经典的段子:请用最简洁的语言描述我国FL。754。…

    2022年7月27日
    10
  • 【Unity3D入门教程】使用C#脚本控制游戏对象

    【Unity3D入门教程】使用C#脚本控制游戏对象使用C#脚本控制游戏对象,是一项必备的基本技能。Unity3D可以使用的脚本有C#和javascript等。我们主要讲注意力集中在C#上。本文将会介绍怎样使用脚本控制场景中的游戏对象。

    2022年8月10日
    8
  • GCC命令编译

    GCC命令编译GCC命令

    2022年10月13日
    3
  • spring配置文件详解_jedis连接redis集群

    spring配置文件详解_jedis连接redis集群[b]JedisCache[/b][code="java"]importjava.io.IOException;importjava.util.Set;importorg.springframework.beans.factory.InitializingBean;importorg.springframework.util.Assert;importre…

    2025年9月7日
    5
  • Prometheus TSDB存储原理

    Prometheus TSDB存储原理Python 微信订餐小程序课程视频 https blog csdn net m0 article details Python 实战量化交易理财系统 https blog csdn net m0 article details Prometheus 包含一个存储在本地磁盘的时间序列数据库 同时也支持与远程存储系统集成 比如 grafanacloud 提供的免费云存储 API 只需将 remote write 接口信息填写在 Prome

    2025年7月16日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号