在用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。