saber presionado llamar fue evento crear como boton activar c# arguments webforms

c# - presionado - ¿Cómo pasar el argumento del comando al llamar al botón de enlace al hacer clic en la función de forma dinámica?(do#)



if button click c# (3)

Tengo una función para la que estoy compartiendo un grupo de botones de enlace. la firma de la función es como:

protected void FunctionName(object sender, EventArgs e) { ... }

Ahora tengo alrededor de 4-5 botones de enlace que estoy utilizando para llamar a la misma función, pero simplemente filtrando las cosas a través del comando de argumentos como:

<asp:LinkButton ID="lbAll" runat="server" Text="All" CommandArgument="all" OnClick="FunctionName"></asp:LinkButton> <asp:LinkButton ID="lbTop" runat="server" Text="Top" CommandArgument="top" OnClick="FunctionName"></asp:LinkButton> (...)

Ahora, tengo un cuadro desplegable que necesita hacer esencialmente lo mismo (en solo dos de los valores seleccionados), solo necesito llamar a esta función y pasar el argumento "todos" o "arriba" a la función: "Nombre de la función "

esto está en C #

Traté de llamar a esa función como

FunctionName(this, New EventArgs());

pero no sé cómo pasar el argumento?

Alguna idea sobre esto? ¡Gracias!


DE ACUERDO. Creo que me perdí mi punto en la última respuesta al darme cuenta de que se trata de llamar al controlador de eventos desde algún lugar del código que no sea ese evento ...

Lo que sugeriría es que refactorice su controlador de eventos para eliminar la funcionalidad y ponerla en un método separado o dos. por ejemplo, en pseudocódigo:

protected void FunctionName(object sender, EventArgs e) { if (top) DoTop(); else if (all) DoAll(); } private void DoTop() { //do stuff } private void DoAll() { //Do different stuff }

Esto debería hacer que sea realmente fácil, simplemente llamar al código que necesita. Althoguh no estoy seguro de sospechar que es una mala práctica llamar a un controlador de eventos solo porque necesita algunas de sus funcionalidades. Ciertamente parece más trabajo de lo que necesita ser. :)

Por supuesto, podría tener un método que tome un parámetro y luego lo trate adecuadamente (factorizando de manera efectiva todo en FunctionName).

Creo que esto responde mejor a tu pregunta. Si no, me voy a ir a casa. ;-)


Pase el LinkButton con el CommandArgument correcto en lugar de esto:

FunctionName(lbAll, EventArgs.Empty)

Pero realmente debería usar el evento OnCommand lugar de OnClick . OnCommand tiene CommandEventArgs como segundo parámetro. Entonces puede obtenerlos con e.CommandArgument en el método. Y llame al ancho del método:

FunctionName(this, new CommandEventArgs("CommandName", "CommandArgument"));


Edición para mayor claridad

Su controlador de eventos para el evento click tendrá dos parámetros, un remitente y un objeto args de evento. El remitente es el objeto que activó el evento (el botón de enlace). En ese controlador de eventos, puede convertir el remitente al tipo de objeto correcto y acceder a sus propiedades.

((LinkButton)Sender).CommandArgument

Al utilizar este método, no es necesario que pase explícitamente su argumento, solo lo recupera del remitente.

Alternativamente (y probablemente mejor) puede usar el controlador de eventos "OnComand". Al buscar la propiedad que ya está utilizando en http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.linkbutton.commandargument.aspx , verá que este controlador de eventos recibe un parámetro CommandEventArgs que tiene una propiedad que expone el objeto CommandParameter. p.ej:

void LinkButton_Command(Object sender, CommandEventArgs e) { Label1.Text = "You chose: " + e.CommandName + " Item " + e.CommandArgument; }

(desde esa página de MSDN).