如何在Visual Studio 2008中为ASP.NET添加页面事件

10

这是一个关于Visual Studio的问题。我认为在有了Intellisense的帮助下应该有一些辅助功能,但我似乎找不到它。

我在VS2008中用ASP.NET C#制作了一个带有codebehind的页面,它自动生成了一个PageLoad事件方法。那么,如果我想为除了PageLoad之外的其他事件添加方法呢?我认为Foo.aspx页面上会有可能添加的方法事件处理程序列表。难道没有更多的,比如PageInit、PageDispose等等吗?我在哪里可以找到它们?

编辑 - 当然,我可以在api中查找方法名称。我正在寻找一个方便的方式在Visual Studio中添加这些方法。如果它可以生成一个,难道它不能生成其他的吗?

6个回答

30
  • 在解决方案资源管理器中,右键单击页面并从上下文菜单中选择“查看组件设计器”
  • 打开属性面板/窗口(按F4)
  • 现在点击黄色箭头/闪电图标,您将看到所有页面事件的列表
  • 双击要添加处理程序的事件

我很确定还有另一种方法(从设计器视图开始),但我无法重现它。

通常我不使用页面事件处理程序,而是覆盖相应的方法(例如,使用OnLoad而不是Page_Load)。要实现这些覆盖之一,您只需在代码后面键入"override"然后按space以获取可以覆盖的方法列表。


1
适用于VS2017! - yu yang Jian
在VS2019中尝试过了,它添加了事件,但是没有一个被调用。我想要的是"Page_Init",而不是"myPageName_Init"。 - unqualified

4

安装了无价的ReSharper(可能不需要),我只需输入:

override

当我按下空格时,IntelliSense弹出一个列表,列出了所有可以重写的事件,例如OnInit,OnPreRender等。


1
在VS2010中,我没有安装ReSharper,但它似乎仍然可以完成这个功能。我认为这是迄今为止提到的所有方法中最简单的方法。 - David Carr
这个可以工作,但是在处理事件和重写On_方法之间有微妙的差别。 - Dave Cousineau

3
作为一种快捷方式,您可以直接输入“Page.”然后查看Intellisense中的列表来查看可用内容。然后,您可以选择其中一个,按+=Tab Tab使其生成存根。一旦存根被创建,您需要在创建它的任何地方删除“Page.event +=”行。这是一种有点笨拙的解决方法,但一旦掌握了技巧,可以非常快速地完成。

简单易记,快速有效 - 不拖泥带水。谢谢! - McArthey
这个运作得很好。由于事件是从名为“Page”的引用处理的,生成的事件处理程序恰好被正确地命名,即:对于“Load”事件,名称为Page_Load。唯一棘手的部分是必须在“方法范围”内完成此操作,因为您无法在类范围内访问“Page”属性。 - Dave Cousineau

0
如果有人不想使用M4N所描述的方式,而是通过代码实现:
在PageName.aspx.cs中;
private void InitializeComponent()
{

    // this.LifeCycle += .. // Use intellisense to see alternatives easily
    this.PreRender += new System.EventHandler(this.EventFunctionName);

}

然后在同一个文件中添加:

private void EventFunctionName(object sender, EventArgs e)
{
    // Code..
}

更新(来自Sahuagin的评论): 这不会生成一个具有适当名称的事件处理程序。事件处理程序必须命名为,例如,Page_Load。这将根据您的类而不是Page命名它,因此它实际上不会连接到您的页面。


此外,这也不会生成一个具有适当名称的事件处理程序。事件处理程序必须被命名为例如 Page_Load。这将使它以您的类命名,而不是以 Page 命名,因此它实际上不会连接到您的页面。 - Dave Cousineau
我最初说过事件处理程序必须是protected而不是private。这取决于具体情况,可能需要也可能不需要。 - Dave Cousineau

0
在源代码窗口中,从对象列表组合框中选择所需的控件(页面)。然后从前面的对象列表组合框右侧的事件列表组合框中选择所需的事件。Visual Studio 将为您创建事件处理程序。

-1

TreeScheme.Nodes[0].ChildNodes[0].Checked=true;

treeviewid.node[0].childnodes[0].checked=true;

这将在页面加载事件中设置子节点为选中状态

编码愉快


什么?除非我弄错了,这与问题完全无关。 - Dave Cousineau

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