3

我来自 ASP 背景并学习 ASP.NET。我想知道 AutoEventWireup 属性是否也连接 Control 事件(如 Button_Click)或只是 Page 事件?我在 SO 的其他地方读到,如果你将它设置为 TRUE 并且还提供显式事件处理程序,它将被执行两次,你能解释为什么会发生这种情况(因为只有 1 个处理程序 VS 必须识别它已经执行)?你能给出将其设置为 False 的用例吗?

希望有代码示例

4

2 回答 2

3

通常它设置为 true,这意味着您甚至不需要显式地连接每个。当您想为多个控件/事件使用相同的事件处理程序时,您将其设置为 false。在这种情况下,您可以将多个事件显式连接到单个事件处理程序。它控制所有事件。当您将该属性设置为 true 并显式连接事件时,.Net 将触发该事件两次,因为委托将被注册两次。

于 2012-11-08T12:33:26.617 回答
1

AutoEventWireupPage元素上通过查找与预期签名和命名约定(即Page_<event>)匹配的方法来工作。如果找到,页面框架将在正常“引发”事件之前直接调用事件处理程序。这就是为什么如果您在代码中注册事件处理程序,它们会被有效地调用两次。

这与事件处理程序的正常工作方式完全不同。如果您编写代码以两次为同一事件注册处理程序,则每个事件只会调用一次。这是因为事件处理程序本质上是一组委托,并且尝试将委托添加到同一方法是无操作的。

AutoEventWireup行为仅适用于页面引发的事件。您不会为其他控件获得它,因此它们应该手动连接,通常在一个Page_InitPage_Load事件中。

如果您不使用AutoEventWireup(即设置为“false”),您必须自己连接页面事件处理程序以调用它们。这就是 Visual Studio 设计器所做的,因为它会为您生成事件注册代码。

于 2012-11-08T12:51:30.617 回答