我试图理解(仅仅因为好奇心)将事件处理程序方法分配给.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是真的,它似乎没有在项目的任何地方生成任何代码?
答案 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" />
方法
CreateChildControls()
如果你想在后面的代码中将它作为控件,这将把按钮添加到页面。但是当你有aspx并且你可以写出按钮的正确位置时,这真的不是很好的方法。这将在所有其他控件下呈现按钮。创建自定义控件时使用此方法。