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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • J1939CANTP

    J1939CANTPSAEJ1939在卡车领域得到了广泛的认可,由多个文档组成,描述了从物理层到诊断层以及应用层的通信协议层。SAEJ1939-21描述了数据链路和传输层,包括两种传输协议变体:用于广播消息的BAM(广播宣布消息),以及CMDT(连接模式数据传输)用于点对点连接。该规范定义了SAEJ1939-21的传输协议如何在AUTOSAR体系结构中实现。它只描述了与AUTOSAR体系结构相关的实现部分。协议特定的细节,如精确的计时,不属于本规范的一部分。因此,为了能够实现J1939…

    2022年5月3日
    88
  • JBOSS 下载_JbusDriver

    JBOSS 下载_JbusDriver1:JBossApplicationServerDownloadshttp://jbossas.jboss.org/downloads/只下载JBossAS7.1.1.Final ASCertifiedJavaEE6FullProfile 2012-03-09 LGPL [b]Communityparticipationonly[/b]

    2022年10月4日
    3
  • oracle客户端配置监听_oracle11g客户端配置

    oracle客户端配置监听_oracle11g客户端配置1、环境介绍操作系统:windows10专业版oracle版本:19coracle客户端版本:19.3oracle客户端下载地址:https://www.oracle.com/database/technologies/oracle19c-windows-downloads.html2、运行软件包中setup.exe进行安装3、使用sqlplus连接数据库sqlplus用户名/密码@服务器/服务名sqlplusdebezium/Smtgbk_123@10.99.99.20

    2025年7月29日
    5
  • lombok插件介绍「建议收藏」

    lombok插件介绍「建议收藏」Lombok项目是一个java库,它可以自动插入到编辑器和构建工具中,增强java的性能。不要再写另一个getter或equals方法,只要有一个注释,你的类就有一个功能齐全的构建器,自动记录变量等等。lombok插件大大减少了java开发的工作量,让程序员更加关注业务逻辑的实现。实现的方法举例:get/set/toString/equals/hashCode/无参构造函数/全参构造函数等。lombok插件注解@Data//data是lombok使用最多的注解,自动生成get/set/

    2025年10月2日
    2
  • Java锁的分类_地锁怎么安装

    Java锁的分类_地锁怎么安装1.Java锁的种类在笔者面试过程时,经常会被问到各种各样的锁,如乐观锁、读写锁等等,非常繁多,在此做一个总结。介绍的内容如下:乐观锁/悲观锁独享锁/共享锁互斥锁/读写锁可重入锁公平锁/

    2022年8月3日
    5
  • LeetCode——Valid Palindrome

    LeetCode——Valid Palindrome

    2022年2月1日
    37

发表回复

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

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