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


相关推荐

  • linux复制文件夹及赋予权限

    1.cp命令命令:cpdir1/a.docdir2表示将dir1下的a.doc文件复制到dir2目录下cp-rdir1dir2表示将dir1及其dir1下所包含的文件复制到dir2下cp-rdir1/.dir2表示将dir1下的文件复制到dir2,不包括dir1目录说明:cp参数-i:询问,如果目标文件已经存在,则会询问是否覆盖;2.scp命令例如:scpid_rsa.pubrouter_17@IP:/home/router_17/.ssh/authori…

    2022年4月7日
    247
  • 免费的集群软件_服务器集群软件

    免费的集群软件_服务器集群软件概述 IBM高可用性集群软件(HighAvailabilityClusterMultiprocessing(HACMPTM))支持广泛的配置,为集群管理员提供了非常高的灵活性。这种灵活性带来了多种的选择:有许多可行的集群配置可以通过一般的审核以及上线运行,但是却没有优化以提供应有的可用性。本文讨论了集群设计人员可以做出的选择,从可选方案中提出建议,以帮助最高的可用性级别。 

    2022年10月15日
    0
  • Java中BufferedWriter类的常用方法

    Java中BufferedWriter类的常用方法BufferedWriter:字符缓冲输出流构造方法BufferedWriter(Writerout):默认缓冲区大小构造字符缓冲输出流对象BufferedWriter(Writerout,intsize):指定缓冲区大小常用方法publicvoidwrite(intc)throwsIOException写入单个字符。c-指定要写入字符的int。publicvoidwr…

    2022年5月30日
    34
  • 手机运行的python_运行python程序的两种方式

    手机运行的python_运行python程序的两种方式前言在手机上运行Python需要用一个软件,叫QPython3L,当然还有别的软件也是可以运行Python的,不过我认为QPython3L是其中相对较好的一个。首先声明一下,我也只是会简单的使用有了它,就可以实现用手机和电脑进行通信了,比如在手机用Socket给电脑发指令,电脑根据收到的指令去执行不同的函数。苹果手机有没有我也不知道,可以自己搜一下如何下载我是在酷安下的,直接搜索qpython3即…

    2022年8月12日
    3
  • ARP欺骗攻击的检测和防御[通俗易懂]

    ARP欺骗攻击的检测和防御[通俗易懂]以太网构建由1500个字节的块组成的数据帧。每个以太网数据帧头包括源MAC地址和目的MAC地址。建造以太网数据帧,必须从IP数据包中开始。但在构建过程中,以太网并不知道目标机器的MAC地址,这就需要创建以太网头。唯一可用的信息就是数据包头中的目标IP地址。对于特定主机的数据包传输,以太网协议必须利用目标IP来查找目标MAC地址。这就是ARP地址解析协议。ARP

    2022年10月26日
    0
  • 百度地图SDK使用[通俗易懂]

    百度地图SDK使用[通俗易懂]将百度地图官网下载的SDK的压缩包解压得到如下文件:将BaiduLBS_Android.jar复制到libs目录下,并点击同步版本比较老的Gradle可能没有这一句,需要手动添加,然后同步在ma

    2022年7月1日
    40

发表回复

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

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