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 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/
- Tutto per portarsi il .NET Framework 3.5 sotto l'ombrellone
- ASPItalia.com Future Web Conference: 15 gennaio 2008, L'Aquila
- #950 - Il supporto al pulsante back del browser con ASP.NET AJAX 3.5 SP 1
- Extension Method per semplificare la Reflection
- Realizzare un controllo custom in ASP.NET AJAX - Seconda parte
- A volte ritornano... GridView vs Repeater vs ListView vs Custom
- Rilasciata la Preview 2 di ASP.NET AJAX 4.0.
- #923 - Caricare dinamicamente un HttpModule
- #949 - Un custom control BoundField con dropdownlist
- Realizzare un controllo custom in ASP.NET AJAX - Prima parte
- La regressione ed ASP.NET 3.5 SP 1
- #941 - Gestire al meglio gli eventi RowCommand di GridView e ItemCommand di DetailsView e FormsView con la classe DataControlCommands
Esprimi il tuo giudizio su questo script:
Per procedere devi essere autenticato.
Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.








Stampa
Snippet
Download 


10annidi.ASPItalia.com: iscriviti alla competizione e vinci fantastici premi ogni mese!
Ciao Andrea,sto utilizzando la funzione SetButton, ma ho alcuni problemi dopo il postback. Infatti, l'onkeydown contiene & invece di & (if ((event...
Continua »»» | Rispondi »»»