博客园  :: 首页  :: 联系 :: 管理

在Asp.NEt中Page_Load()事件加载两次的现象

Posted on 2010-04-26 14:40  sunrack  阅读(721)  评论(0编辑  收藏  举报

在用VS2005做WebForm项目时发现很多aspx页面加载的时候page_load()时加载两次,在Page页面上输出两个相同的结果,发现原来是AutoEventWireup属性搞得鬼:

      <%@ Page language="c#" Codebehind="Result.aspx.cs" AutoEventWireup="true" Inherits="test.Result" %>

      解决办法:

      <%@ Page language="c#" Codebehind="Result.aspx.cs" AutoEventWireup="false" Inherits="test.Result" %>

      原因分析: 

      如果   Page   指令的   AutoEventWireup   属性被设置为   true(或者如果缺少此属性,因为它默认为   true),该页框架将自动调用页事件,即   Page_Init   和   Page_Load   方法。在这种情况下,不需要任何显式的   Handles   子句或委托。   
      AutoEventWireup   属性的缺点是它要求页事件处理程序具有特定、可预测的名称。这限制了您在为事件处理程序命名时的灵活性。因此,在   Visual   Studio   中,AutoEventWireup   属性在默认情况下设置为   false,设计器会生成用于将页事件绑定到方法的显式代码。    
     如果将   AutoEventWireup   设置为   true,Visual   Studio   将生成用于绑定事件的代码,页框架将自动基于事件的名称来调用事件。这可能会导致在该页运行时两次调用相同的事件代码。因此,当在   Visual   Studio   中操作时,应尽量使   AutoEventWireup   设置为   false。   

      关于AutoEventWireup详细资料请参考微软MSDN