.Net何时分配事件处理程序方法来控制事件?

时间:2017-08-17 13:32:41

标签: c# asp.net .net visual-studio

我试图理解(仅仅因为好奇心)将事件处理程序方法分配给.NET中的事件

在这个例子中,假设我们有一个ASP webform,带有按钮的WebForm1,Button1。默认情况下,当我们向页面添加按钮时,.NET / VS允许我们定义在WebForm1类中单击按钮时运行的方法。我很想知道它在幕后做了什么。

我知道这与事件和代表有关,我对这里发生的事情的理解如下:

当我们在ASP项目中创建一个新的webform时,.NET将其声明为一个继承自页面类的新类;

public partial class WebForm1 : System.Web.UI.Page
{
}

我可以在页面上添加一个按钮,.NET会创建一个按钮对象的实例(虽然在设计器文件中)

public partial class WebForm1 : System.Web.UI.Page
{
    protected Button Button1;
}

我可以声明一个单击按钮时运行的方法

public partial class WebForm1 : System.Web.UI.Page
{
    protected Button Button1;
    protected void Button1_Click(object sender, EventArgs e)
    {
         Debug.WriteLine("Button clicked");
    }
}

那么幕后发生了什么让我开箱即用?

System命名空间定义了一个EventHandler,它是一个委托;

public delegate void EventHandler(object sender, EventArgs e);

按钮类具有此委托的实例

public event EventHandler Click;

某处将Button1_Click方法分配给Button1中的Click事件

这将是

的内容
Button1.Click += Button1_Click;

我的问题是,这是怎么回事?

这是WebForm1类中发生的事吗?

修改

正如其他人所说,有一些标记我忘记提及如下:

<asp:Button ID="Button1" runat="server" Text="Button" />

另外,正如mybirthname和This Resource所提到的,我已经找到了,如果我决定改变

AutoEventWireup="true"

AutoEventWireup="false"

我可以自己完成任务。

那么.NET / VS将在哪里做到这一点是AutoEventWireUp是真的,它似乎没有在项目的任何地方生成任何代码?

1 个答案:

答案 0 :(得分:0)

您可以在Page_Load事件中执行此操作。

List<String> output = Arrays.asList(line.split(",")); 

但是你现有的代码将不起作用。目前,您只有一个按钮未添加到页面的protected void Page_Load(object sender, EventArgs e) { Button1.Click += Button1_Click; } 中。

你需要在aspx中拥有:

Controls

此外,您可以在这里使用OnClick事件

<asp:Button runat="server" ID="Button1"  />

如果您想要在<asp:Button runat="server" ID="Button1" OnClick="Button1_Click" /> 方法

中添加正确位置后面的代码中添加Button Control
CreateChildControls()

如果你想在后面的代码中将它作为控件,这将把按钮添加到页面。但是当你有aspx并且你可以写出按钮的正确位置时,这真的不是很好的方法。这将在所有其他控件下呈现按钮。创建自定义控件时使用此方法。