如何在Visual Studio 2008 IDE中订阅页面事件

3

重要提示
有人能解决这个问题吗?
如何在VS 2008中创建页面的Init、Load、PreRender等事件处理程序?当我们双击页面时,它会创建Page_Load事件。如何创建页面的其他事件?我在ASP.NET应用程序中使用c#。
enter image description here
图片中没有事件选项卡。


2
这是我喜欢vb.net的一件事情。在代码视图中,您可以从所有页面事件列表中选择要处理的事件。Vb.Net默认情况下autoeventwireup=false。我想知道在c#中是否有类似简单的方法。 - ScottE
5个回答

3
订阅页面事件有以下几种方式:
  • 重写 Web.UI.Page 类的 on_xxx 方法。只需在键入 override 关键字时开始输入 private override,Intellisense 就会自动告诉您可以重写的可用方法,您可以从中选择并按 tab 键(该方法的原型将自动为您创建)。

  • 如果页面设置了 AutoEventWireup 属性为 true,则可以定义一个方法,其原型和名称为 Page_[your event],如 Page_Init,并带有适当的参数。事件将自动连接

    ASP.NET 页面框架支持一种机制,该机制使用 Web Forms 页面的 AutoEventWireup 属性自动关联页面事件和事件处理程序方法。如果 @ Page 指令的 AutoEventWireup 属性设置为 TRUE(或者未指定,因为其默认值为 TRUE),则 ASP.NET 页面框架会自动调用页面事件处理程序方法。

    例如,Page_Init 和 Page_Load 事件处理程序方法由 ASP.NET 页面框架明确调用,而无需显式事件委托。

    但是,使用 AutoEventWireup 属性自动关联页面事件及其事件处理程序方法的缺点是,事件处理程序方法必须具有标准的、预定义的名称。这限制了您如何命名事件处理程序方法。


以下是页面事件的概要及其顺序:

  • PreInit
  • Init
  • InitComplete
  • PreLoad
  • Load
  • 控件事件
  • LoadComplete
  • PreRender
  • SaveStateComplete
  • Render
  • Unload


我通常会参考 MSDN 上的这种速查表来检查要重写哪个方法:

enter image description here


谁说没有,我已经使用了好几年了。你最好再检查一下,可能是你的Visual Studio安装出了一些问题。 - Shekhar_Pro
你确定你是在设计模式下访问它而不是代码视图下吗? - Shekhar_Pro
是的,我正在设计模式下访问它,但事件选项卡不在那里。控件有事件选项卡,但页面没有。很难过 :( - Student
谢谢@Shekhar_Pro,但我想通过VS 2008 IDE创建这些事件。我希望VS2008为我创建原型。 - Student
怎么可能?太奇怪了。 - Student
显示剩余2条评论

3

以下是您的答案
在解决方案资源管理器中,右键单击页面并从上下文菜单中选择“查看组件设计器”,现在在属性窗口中,您将拥有事件选项卡。


1
我更喜欢使用On方法,因此可以重写OnLoad来设置加载事件处理程序、OnPreRender等。每个方法本质上都调用了相应的事件处理程序,例如:
protected override void OnInit(EventArgs e)
{
   base.OnInit(e); //don't remove
}

我认为你也可以手动添加事件处理程序:
protected void Page_Init(object sender, EventArgs e)
{

}

不需要为此设置任何内容(无需显式监听事件),但我对此并不100%确定。

希望有所帮助。


谢谢 @Brian,但我想通过VS 2008 IDE创建这些事件。我希望VS2008为我创建原型。 - Student
1
当您打开页面时,事件选项卡的选项才会出现,而不是从解决方案资源管理器中选择页面...请尝试打开页面,单击设计器,看看是否有事件按钮(闪电图标)。 - Brian Mains
我尝试了,但仍然没有事件选项卡(闪电图标)。 - Student
这是我之前回答的,但不幸的是它只适用于像按钮等控件,而不适用于页面本身。 - Shekhar_Pro
1
那么你的答案是否定的。只能通过代码实现。当你双击Page_Load时,它会出现,因为它被设置为默认事件(每个控件都可以有一个[DefaultEvent]属性定义)。 - Brian Mains
只有在C#页面处于“设计”视图时,才会显示那个闪电图标选项,而在查看页面源代码时则不会。 - atconway

1

这个链接可能会有所帮助——它是msdn关于页面“生命周期”的参考,包括您提到的其他事件的创建。

http://msdn.microsoft.com/en-us/library/ms178472.aspx

除了双击页面控件(按钮、超链接、数据控件)之外,查看 c# 文件时还有一个下拉列表,其中包含页面的其他“生命周期”事件以及您创建的其他控件事件。

enter image description here


抱歉,下拉列表中只有已创建的事件,没有未创建的事件。下拉列表中只有Page_Load事件。 - Student
确切地说,您发布的图像中只有Page_Load事件,而没有Page_Init和Page_PreRender。 - Student

0

看一下这个:http://msdn.microsoft.com/en-us/library/6w2tb12s%28v=VS.90%29.aspx(VS 2008 版本)

它说你可以声明式地创建一个名为 Page_event 的方法。

例如,要为页面的 Load 事件创建处理程序,请创建一个名为 Page_Load 的方法。

ASP.NET 页面会自动将页面事件绑定到具有 Page_event 名称的方法。此自动绑定由@ Page 指令中的 AutoEventWireup 属性配置,默认情况下设置为 true。如果将 AutoEventWireup 设置为 false,则页面不会自动搜索使用 Page_event 命名约定的方法。

对我有效!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接