AutoEventWireup属性的确切含义

使用Asp.NET时,新建的aspx页面第一行page指令中包含了一个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)
   {
    //事件内容
   }

     委托将事件与该页面显式关联。在AutoEventWireup="false"时,如果没有委托,事件将不执行。

     这与早期VB采用的隐式事件挂起截然不同,各有利弊。但,Asp.NET中可以修改AutoEventWireup="true",使页面与某些特殊的事件方法绑定,自动识别这些具有特定名称的事件,而不需要进行委托。这些特定名称包括:Page_Init, Page_Load, Page_DataBind, Page_PreRender和Page_Unload等。比如:

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

     针对这些事件方法,开发人员可以利用该参数避免编写过多的链接代码。如果该属性设置为"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)
   {
    //事件内容
   }

     一定不可以在没有委托的情况下使用Page_Load类似的方法!

     大部分情况下,页面不需要关联如此多的特殊事件,会增加额外的操作和系统开销。同时, ASP.NET 页框架自动调用事件处理的方法基于其预定名称,这会导致到相同事件处理方法当页运行被调用两次,也会增大系统开销。因此,Microsoft 建议始终将 AutoEventWireup 设置为 FALSE。

@ Page指令的说明:
http://msdn2.microsoft.com/en-us/library/ydy4x04a(vs.71).aspx
ASP.NET 服务器控件事件模型
http://msdn2.microsoft.com/en-us/library/59t350k3(vs.71).aspx

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Login.aspx.cs" Inherits="Hotel.WebForm1" EnableEventValidation="false" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> <link rel="stylesheet" href="Assets/Libraries/Bootstrap/css/bootstrap.min.css" /> <style> body{ background-image:url(../Assets/Images/hotel4.jpg); background-size:cover; } .container-fluid{ opacity:0.9; } </style> </head> <body> <form id="form1" runat="server" > <div> <div class="container-fluid"> <div class="row" style="height:200px"></div> <div class="row"> <div class="col-md-4"></div> <div class="col-md-4 bg-light rounded-3"> <h1 class="text-text-success text-center">皇家理工度假酒店</h1> <form> <div class="mb-3"> <label for="UserTb" class="form-label">用户名</label> <input type="text" class="form-control" id="UserTb" runat="server" required="required"> </div> <div class="mb-3"> <label for="PasswordTb" class="form-label">密码</label> <input type="password" class="form-control" id="PasswordTb" runat="server" required="required"> </div> <div class="mb-3"> <label id="ErrMsg" class="text-danger" runat="server"></label> <input type="radio" id="AdminCb" runat="server" name="Role"><label class="text-success">管理员</label> <input type="radio" id="UserCb" runat="server" name="Role"><label class="text-success">用户</label> </div> <div class="d-grid"> <asp:Button ID="LoginBtn" runat="server" Text="登陆" class="btn btn-success btn-block" OnClick="LoginBtn_Click" /> </div> <br /> </form> </div> <div class="col-md-4"></div> </div> </div> </div> </form> </body> </html>我在form中添加了align=center属性但是删除后却依旧运行了原先配置
05-27

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值