обработчик событий и обратная передача (.net) - PullRequest
1 голос
/ 07 октября 2011

У меня есть простая asp.net-страница с кнопкой.

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" MasterPageFile="~/MasterPage.master"%>

<asp:Content runat="server" ID="content" ContentPlaceHolderID="ContentPlaceHolder1">

<asp:Button runat="server" ID="btn1" Text="Click me" />

</asp:Content>

с кодом:

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        btn1.Click += new EventHandler(Btn1_Click);
    }
}

protected void Btn1_Click(Object sender, EventArgs e)
{
    //do stuff
}

Событие Click не возникает, когда я нажимаю кнопку, ноэто если я помещаю событие в разметку кнопки ИЛИ, если я связываю EventHandler с обратной передачей.Зачем?Я до сих пор не понимаю.Не должно ли событие возникать независимо от его источника?

1 Ответ

3 голосов
/ 07 октября 2011

Я не уверен на 100%, что вы спрашиваете об этом, но: если вы не подключаете обработчик событий каждый раз, когда страница загружается, он не будет работать.Если вы думаете, что AutoEventWireUp должен это делать, это не то, для чего он.Для пояснения в описании для AutoEventWireup написано

'Автоматическое связывание выполняется только для событий страницы, но не для событий для элементов управления на странице. "

Он либо должен быть объявлен в самом элементе управления:

<asp:Button runat="server" ID="btn1" Text="Click me" OnClick="Btn1_Click" />

, либо вам необходимо удалить! Page.IsPostback и связать обработчик событий для каждой загрузки.

protected void Page_Load(object sender, EventArgs e)
{
    btn1.Click += new EventHandler(Btn1_Click);
}
...