Agosto 21

2018

La solución más simple

Muchas veces me he ido a buscar información en Internet de cómo poder hacer el evento Click de un botón en una página ASP. Casi siempre he visto soluciones un poco coplicadas, y hoy se me encendió la luz en la cabeza, se me ocurrió una cosa, la probé y funcionó.

Localizar los controles con JAVASCRIPT

El igual que para recoger un valor de un control ASP desde JavaScript utilizamos la propiedad ClientID se me ocurrió que se podría utilizar esto para poder invocar el evento OnClick del objeto que se desea. Eso sí, tiene que se un objeto que permita ese evento.

En JavaScript recuperamos un objeto con este código.

var obj = document.getElementById('<%= objeto.ClientID%>');
var miValor = obj.value;

Siguiendo esa lógica, y sabiendo de otras veces que para llamar el evento OnClick y hacer el postback como haría el control botón de ASP es __doPostBack() se me ocurrió mirar con la inspección cómo hacía el código de ASP la llamada a dicho evento.

Entonces comprobé que la página renderiza ese evento de la siguiente manera href="javascript:__doPostBack('ctl00$ContentPlaceHolder1$NewCustomer$btnSave',''). Comprobé pues que es muy fácil imitar ese comportamiento desde JavaScript con una simple línea de código

__doPostBack('<%= objeto.ClientID.Replace("_","$") %>', '');

Y eso es todo. LA GRAN SOLUCIÓN es tan simple como esa línea de código.

Cuando utilizardo

Este tipo de acción nos pueden ser interesantes cuando, dependiendo de las acciones del usuario, nos interesa llamar el evento OnClick de un botón ASP después, por ejemplo, de hacer una verificación con JavaScript, o como era mi caso, que el usuario puede rellenar el formulario directamente y hacer click o rellenarlo presionando un botón de su red social, por lo que después de recuperar los datos del usuario se rellenaba el formulario y invocaba al evento OnClick de ASP para continuar con el proceso de registro de forma normal y así no tener que programar dos veces lo mismo. Pero se puede utilizar para muchas otras cosas.

Consideraciones

Tener en cuenta que el objeto debe de tener su correspondiente función en el CodeBehind como si presionáramos el botón directamente

<asp:Button runat="server" CssClass="btn btn-block btn-success" ID="Boton1" OnClick="Boton1_Click"></asp:Button>

Ya que si no lo tenemos la llamada al evento OnClick nos generará un postback para no hacer nada.


Happy Codding


#ASP #javascript


0 Comentarios



Archivo