`
happmaoo
  • 浏览: 4324747 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

AutoEventWireup="false"导致Page_Load事件未执行

阅读更多

在调试代码时发现Page_Load事件未执行,找了半天原因,原来是AutoEventWireup设置成false导致。
转一篇关于AutoEventWireup的帖子.

asp.net(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

分享到:
评论

相关推荐

    关于Asp.net页面Page_Load被执行两次的问题分享

    @ Page language=”c#” Codebehind=”ShowSimpleFactory.aspx.cs” AutoEventWireup=”false” Inherits=”test.DesignPatternTest.ShowSimpleFactory” %>   当你将这个属性设置为true时,Asp.Net将页面的生命...

    asp.net 无限级菜单显示实例源码

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE ...

    ASP.NET党校在线考试系统整站源码

    <%@ Page Title="" Language="C#" MasterPageFile="~/HouAdmin/MasterPage.master" AutoEventWireup="true" CodeFile="admin.aspx.cs" Inherits="HouAdmin_admin" %> <asp:Content ID="Content1" ...

    ascx使用办法:属性、方法和事件

    <%@ Control Language="c#" AutoEventWireup="false" Codebehind="dg.ascx.cs" Inherits="startmssql.ucs.dg" TargetSchema="http://schemas.microsoft.com/intellisense/ie5"%> <asp:DataGrid id="dgsy" runat=...

    asp.net无限级分类

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE ...

    基于ASP的智能选课系统

    <%@ Page language="c#" src="addc.aspx.cs" AutoEventWireup="false" Inherits="class_kinghome.addc" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > <title>addc <meta content=...

    asp.net webfrom新闻发布系统实例

    <%@ Page Title="" Language="C#" MasterPageFile="~/newsindex.Master" AutoEventWireup="true" CodeBehind="index.aspx.cs" Inherits="web.index" %> <asp:Content ID="Content1" ContentPlaceHolderID="heads" ...

    小型文件系统参考

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Page_File_Add.aspx.cs" Inherits="BDLSerSystem.FileManage.Page_File_Add" %> <%@ Register assembly="Brettle.Web.NeatUpload" namespace="Brettle....

    asp.net 页面逐步呈现的方法总结

    @ Page Language=”C#” AutoEventWireup=”true” CodeBehind=”flush让页面分块逐步呈现.aspx.cs” Inherits=”Web_1.flush让页面分块逐步呈现” %> <!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitio

    c# aspx对文件上传功能演示

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE ...

    ASP.NET中HyperLink超链接控件的使用方法

    HyperLink(超链接) 作用:负责页面之间的导航 属性 ...@ Page Language=”C#” AutoEventWireup=”true” CodeFile=”HyperLink.aspx.cs” Inherits=”WebControls_HyperLink” %>   <!DOCTYP

    ASP.net中保持页面中滚动条状态的代码

    针对这个问题我在网上找了好多...@ Page Language=”C#” AutoEventWireup=”true” CodeBehind=”Default.aspx.cs” MaintainScrollPositionOnPostback=”true” Inherits=”Default.Default” %> 在html原页面顶部将...

    IIS安装时缺失的文件ssinc51.dll

    IIS安装时缺失的文件ssinc51.dll

    ASP.NET的网页代码模型及生命周期

    <%@ Page Language=“C#” AutoEventWireup=“true” CodeFile=“Default.aspx.cs” Inherits=“_Default” %> <!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” ...

    连锁中心配送系统.rar

    <%@ Page language="c#" CodeFile="ST_RoomOrder.aspx.cs" AutoEventWireup="false" Inherits="ST_GROUP.ST_RoomOrder" %> <%@ Register TagPrefix="uc1" TagName="ButtomModule" Src="Modules/ST_ButtomModule.ascx...

    酒店管理系统.rar

    <%@ Page language="c#" CodeFile="ST_RoomOrder.aspx.cs" AutoEventWireup="false" Inherits="ST_GROUP.ST_RoomOrder" %> <%@ Register TagPrefix="uc1" TagName="ButtomModule" Src="Modules/ST_ButtomModule.ascx...

    企业信息管理.rar

    <%@ Page language="c#" CodeFile="ST_RCategoryEdit.aspx.cs" AutoEventWireup="false" Inherits="ST_GROUP.ST_RCategoryEdit" %> <%@ Register TagPrefix="uc1" TagName="ButtomModule" Src="Modules/ST_...

    Asp.NET新闻发布系统

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="login.aspx.cs" Inherits="login" %> <!DOCTYPE ...

    基于 FreeTextBox 的 在线文本编辑器 Demo

    引入dll之后在页面添加 ...之后记得修改 validate...<%@ Page Language="C#" AutoEventWireup="true" validateRequest="false" CodeFile="DeployEx.aspx.cs" Inherits="QuickRespondingSystem_bullitenManage_DeployEx" %>

    新闻系统的开发 实例

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <%@ Register Src="custom/bottom.ascx" TagName="bottom" TagPrefix="uc1" %> <!DOCTYPE ...

Global site tag (gtag.js) - Google Analytics