Una delle grandi sorprese che incontra un programmatore ASP.NET nella realizzazione delle proprie pagine è l'individuazione del button, in presenza di control di questo tipo della pagina, il cui evento sarà attivato una volta che l'utente preme il pulsante "invio" in una maschera per l'inserimento dati.
Un esempio sotto gli occhi di tutti è il form di ricerca nel sito o tra i messaggi del forum nella home-page del sito http://www.asp.net. Una volta inserito il testo da cercare e premuto "invio", viene eseguito un postback della pagina senza alcuna ricerca, perchè sarà avviata solo dopo aver cliccato sul linkButton corrispondente.
Con il codice seguente possiamo definire per ogni textbox inserita nella nostra pagina un button di default. Questo ci permette di avere più maschere di ricerca in una pagina ed essere sicuri che anche se l'utente non clicca direttamente sul button apposito, sarà avviato l'evento appropriato.
Per ottenere questo comportamento è sufficiente utilizzare la funzione "SetButton", funzione che possiamo inserire in una classe della nostra webapplication o dove più ci è comodo.
<%@ Page language="vb" %> <script runat="server"> sub Page_Load() SetButton(txt1,but1) SetButton(txt2,but2) SetButton(txt3,but3) end sub sub Button1Event(sender As Object, e As System.EventArgs) msg.Text="Premuto 'Button1', valore del txt1: "+txt1.Text end sub sub Button2Event(sender As Object, e As System.EventArgs) msg.Text="Premuto 'Button2', valore del txt2: "+txt2.Text end sub sub Button3Event(sender As Object, e As System.EventArgs) msg.Text="Premuto 'Button3', valore del txt3: "+txt3.Text end sub sub SetButton(txt as TextBox,btn as Button) dim formName as string dim c as Control= btn.Parent while(not (typeof c is System.Web.UI.HtmlControls.HtmlForm)) c=c.Parent end while if typeof c is System.Web.UI.HtmlControls.HtmlForm then formName = c.ClientID else formName = "forms[0]" end if dim jsString as string jsString= "if ((event.which && event.which == 13) || (event.keyCode && event.keyCode == 13)) {document."+formName+".elements['"+btn.UniqueID+'].click();return false;} else return true; " txt.Attributes.Add("onkeydown",jsString) end sub </script> <html><body> <form runat="server"> <asp:textbox id="txt1" runat="server" /> <asp:button id="but1" runat="server" text="Button1" onclick="Button1Event" /><br /> <asp:textbox id="txt2" runat="server" /> <asp:button id="but2" runat="server" text="Button2" onclick="Button2Event" /><br /> <asp:textbox id="txt3" runat="server" /> <asp:button id="but3" runat="server" text="Button3" onclick="Button3Event" /><br /> <asp:label id="msg" runat="server" /> </form> </body></html>
Questa tecnica non funziona con Netscape versione 4.0.
Questo codice è un perfezionamento, per renderlo cross-browser, di una tecnica descritta dal programmatore tedesco Janus Kamp Hansen descritta su http://www.kamp-hansen.dk/
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.