1

在我的 VB.NET 网页中,我有这个标准事件。请注意事件声明中的“处理”子句。

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
End Sub

在我的 C# web 应用程序中,我有这个:

protected void Page_Load(object sender, System.EventArgs e)
{

由于 C# 没有等效的“句柄”,并且据我所见,事件处理程序是使用委托 += 语法连接起来的,我一直在寻找这个,但我在 aspx 页面 aspx.cs 中找不到它文件或 aspx.designer.cs 文件。

在 VB 中,我将在代码编辑器窗口的顶部有两个下拉列表,我可以选择 Web 表单上的任何对象或 Web 表单本身,然后查看该对象的可能事件。选择事件会将我带到事件处理程序,或者如果它不存在,它将为我创建存根。

我知道 C# 中的“属性”窗口(我也认为是 VB)有一个“事件”选项卡,它显示所选对象 GUI 对象的事件列表,但“页面”并未显示为可以选择的对象。

  1. C# 在哪里定义事件到处理程序的连接?

  2. 如何为 Page 事件处理程序例程生成存根?我知道句柄是默认出现的,但是如果它被删除或者我想添加一个Page_initialize代码怎么办?有没有一种简单的方法来获取存根,或者我需要去对象浏览器获取语法吗?

4

3 回答 3

1

C# 在哪里定义事件到处理程序的连接?

Page_Load是一个自动连接的特殊事件。这是一个保留名称。因此,您无需执行任何操作即可连接此事件。只需在后面的代码中声明即可。

于 2012-07-08T19:26:05.040 回答
1

在 C# Web 表单中,后面标记代码上的 @Page 指令 AutoEventWireup 属性默认为 true,而 VB 则为 false。要查看@Page 指令及其所有相关属性,请在解决方案资源管理器中右键单击您的网页并选择“查看标记”

如果 AutoEventWireup=true,运行时将自动连接它在代码中找到的与 Page_EventName 的命名约定形式匹配的事件处理程序。但是,您可以关闭此功能并使用标准 C# += 分配手动连接页面事件处理程序。如果您使用 AutoEventWireup=true,则不仅您的方法名称必须匹配,而且显然它还必须具有适当的方法签名,以便运行时自动连接。

有关 AutoEventWireup 的详细讨论,请参阅此 KB:http: //support.microsoft.com/kb/324151

关于您的第二个问题,在 C# 中,无法像在 VB 中那样为页面事件生成“存根”。正如其他人(包括您自己)所指出的那样,C# 中有类似的功能可以通过属性窗口生成控制对象事件存根。但是,对于页面事件,您必须知道事件名称和适当的签名并自己编码。

于 2012-07-08T22:37:20.127 回答
-1
namespace MyNamespace
{
    public class Myclass : System.Web.UI.Page
    {
        override protected void OnInit(EventArgs e)
        {
            this.Load += new System.EventHandler(this.Page_Load);
        }

        private void Page_Load(object sender, EventArgs e)
        {
        }
    }
}

参考:https ://support.microsoft.com/en-us/help/324151/how-to-use-the-autoeventwireup-attribute-in-an-asp-net-web-form-b​​y-usi

于 2018-01-26T13:20:54.440 回答