¿Cómo es que los atributos de las propiedades de controlador de eventos en controles ASP.NET tienen un prefijo (OnLoad para el controlador de eventos Load)

StackOverflow https://stackoverflow.com/questions/969128

  •  13-09-2019
  •  | 
  •  

Pregunta

Esto es sólo para una mejor comprensión del marco ASP.NET. Cuando se utiliza un control de una manera declarativa (que sería marcado formulario web), se asigna controladores de eventos por su nombre de método que utiliza un atributo que comienza con On:

<asp:Button runat="server" OnClick="..."/>

Sin embargo, cuando se mira a la clase System.Web.UI.WebControls.Button que tiene una propiedad llamada manejador de sucesos Click que el delegado se asigna a:

button.Click += new EventHandler(...);

Entonces, ¿cómo se implementa esto? Es que sólo una convención seguida por el analizador?

Yo sé, es una pregunta extraña, la respuesta va a hacer nada más que satisfacer mi curiosidad.

¿Fue útil?

Solución

Esta es una convención de nomenclatura utilizado por ASP.NET que, en lugar inútilmente, parece idéntica a otra convención de nomenclatura común ampliamente utilizado a través de .NET. A pesar de la aparente similitud, estas dos convenciones no están relacionados.

La convención de todo el .NET, que resulta ser irrelevante aquí, es que es común que los eventos tengan métodos correspondientes que elevan el evento, y para los nombres de los métodos que se formó mediante la adición de un prefijo On al evento nombre. Por ejemplo, el evento Click ofrecido por Button se relaciona con un método OnClick, lo que plantea ese evento (como ya se ha dicho en otra respuesta aquí).

La parte confusa es que el OnClick Método tiene no que ver con la OnClick atributo que las preocupaciones de interrogación.

Es fácil demostrar que los métodos OnSomeEvent son irrelevantes aquí escribiendo un control que no tiene cualquiera de estos métodos. Aquí está el código subyacente para un simple control de usuario:

public partial class EventWithoutMethod : System.Web.UI.UserControl
{
    public event EventHandler Foobar;

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

    protected void Button1_Click(object sender, EventArgs e)
    {
        if (Foobar != null)
        {
            Foobar(this, EventArgs.Empty);
        }
    }
}

Esto declara un evento Foobar. (En realidad nunca lo levanta, pero eso no importa para los fines de exploración.) Se hace no definir un método OnFoobar. Sin embargo, ASP.NET es perfectamente feliz para nosotros usar la convención OnSomeEvent cuando usamos el control:

<user:EventWithoutMethod runat="server" OnFoobar="FooHandler" />

De hecho, no sólo es feliz para nosotros hacer que, en realidad requiere ella. A pesar de que mi control no define ningún miembro de llama OnFoobar-caso se llama simplemente Foobar-Tengo que escribir OnFoobar si quiero conectar el controlador de eventos de mi archivo .aspx. Si acabo de poner un atributo Foobar allí en un intento de unir el evento, el controlador no se ejecutará. (Inútilmente, ASP.NET no genera un error cuando se hace eso, sólo silencio no puede hacer nada con el atributo, y el controlador de eventos nunca se agota.)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top