`
heavenslv
  • 浏览: 82408 次
  • 性别: 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_load部分会在一次页面加载的时候执行两次哦!千万注意不要去掉aspx中的 AutoEventWireup=”false”设置。 <%@ Page language=”c#” Codebehind=”ShowSimpleFactory.aspx.cs” AutoEventWireup=”false...

    【ASP.NET编程知识】ASP.NET的事件模型(很适合学习的文章).docx

    每个阶段都有其对应的事件,例如 Page_Init 事件、Page_Load 事件等。这些事件可以被程序员重写,以便在不同的阶段执行特定的操作。 在 Default.aspx 页面中,我们可以看到 Page_Load 方法,这个方法是在页面加载时...

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

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

    DataList分页(新).txt

    <%@ Page language="c#" CodeBehind="ProductList.aspx.cs" AutoEventWireup="false" Inherits="NineOneBest._91best3._0.product.ProductList" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">...

    C#纯代码实现GridView绑定增删改.docx

    - 在后台代码中,`Page_Load`事件处理程序用于初始化和绑定数据。 2. **数据源绑定** - `Page_Load`事件中,首先判断是否为页面首次加载(`!IsPostBack`)。如果为首次加载,执行数据绑定操作。 - 使用自定义的...

    asp.net自定义分页控件示例

    - 在页面加载时,通过`Page_Load`事件进行必要的初始化操作。 - 限制`txtpage`只能输入数字,确保输入的有效性。 2. **分页按钮点击事件**: - 当用户点击分页按钮时,触发`PagerButtonClick`事件。 - 根据按钮...

    c#实现无刷新的DropdownList联动效果.pdf

    <%@ Page language="c#" Codebehind="WebForm2.aspx.cs" AutoEventWireup="false" Inherits="WebApptest1.WebForm2" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > <title>WebForm2 ...

    用户控件示例

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load If Not IsPostBack Then ' 初始化用户控件 MyUserControl.lblMessage.Text = "欢迎来到示例页面!" End If ...

    .net面试之葵花宝典.doc

    一个ASP.NET页面一般都对应一个隐藏类,例如:<%@ Page language="c#" Codebehind="Tst1.aspx.cs" AutoEventWireup="false" Inherits="T1.Tst1" %> 11. ViewState 的概念 ViewState是一种保存状态的机制,可以通过...

    \ASP.NET技巧DataGrid传统分页方式

    <%@ Page Language="C#" CodeBehind="DataGridPage.aspx.cs" AutoEventWireup="false" Inherits="netCRM.DataGridPage" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <TITLE>...

    Check if JavaScript is Enabled from Server-Side Using an User Control

    protected void Page_Load(object sender, EventArgs e) { jsTestFrame.Attributes.Add("onload", "this.parentNode.IsJavaScriptEnabled=true;"); jsTestFrame.Attributes.Add("onerror", "this.parentNode....

    用TreeView实现树菜单

    <%@ Page language="c#" CodeBehind="menu_Left.aspx.cs" AutoEventWireup="false" Inherits="hzquery.menu.menu_Left" %> <title>menu_Left <meta name="GENERATOR" content="Microsoft Visual Studio 7.0"> ...

    c实现无刷新dropdownlist联动效果

    <%@ Page language="c#" Codebehind="WebForm2.aspx.cs" AutoEventWireup="false" Inherits="WebApptest1.WebForm2" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > <title>WebForm2 ...

    在asp.net中存取图片到数据库的示例.rar_.net图片_asp.net_asp.net photo_数据库 asp示例_

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="UploadImage.aspx.cs" Inherits="YourNamespace.UploadImage" %> <!DOCTYPE html> 上传图片到数据库 <form runat="server"> ...

    ajax 前台js调用后台方法

    <%@ Page language="c#" CodeBehind="WebPage1.aspx.cs" AutoEventWireup="false" Inherits="Web.WebPage1" %> <script language="javascript"> function getValue() { // 如果使用AjaxPro.dll,则需要加上命名...

    使用DSOFramer全攻略

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

    Ajax之用户注册实例_aspx开发教程.rar

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Register.aspx.cs" Inherits="YourNamespace.Register" %> <!DOCTYPE html> 用户注册 <script src="Scripts/jquery-3.5.1.min.js"> <script src=...

    Asp.NET程序中常用的三十三种代码.

    protected void Page_Load(object sender, EventArgs e) { Response.Write("你好,世界!"); } ``` 这是最基础的输出语句,用于验证页面功能。 2. **用户控件交互**: ```csharp public partial class ...

Global site tag (gtag.js) - Google Analytics