Friday, September 28, 2007

AutoFocus e Asp.Net

. Friday, September 28, 2007

In Asp.Net 2.0 tra le tante novità c'è la possibilità di settare il focus di un determinato controllo da codice:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
SetFocus(btnFocus)
End Sub

Se si analizza  il markup della pagina renderizzata, si può notare una serie di blocchi script che vengono innietati da Asp.Net(WebTestPort è il nome della mia web folder):

<script src="/WebTestPort/WebResource.axd?d=JOzeK6_XXttVr6DVBJy-NA2&amp;t=633240927615853308" type="text/javascript"></script>

inoltre prima della chiusura del tag form viene aggiunto un altro script per richiamare la funzione WebForm_AutoFocus:

<script type="text/javascript">
<!--
WebForm_AutoFocus(
'btnFocus');// -->
</script>

All'interno del file WebResource.axd troviamo la funzione javascript WebForm_AutoFocus  che ci permette di settare il focus del controllo:

function WebForm_AutoFocus(focusId) {
var targetControl;
if (__nonMSDOMBrowser) {
targetControl
= document.getElementById(focusId);
}
else {
targetControl
= document.all[focusId];
}
var focused = targetControl;
if (targetControl && (!WebForm_CanFocus(targetControl)) ) {
focused
= WebForm_FindFirstFocusableChild(targetControl);
}
if (focused) {
try {
focused.focus();
if (__nonMSDOMBrowser) {
focused.scrollIntoView(
false);
}
if (window.__smartNav) {
window.__smartNav.ae
= focused.id;
}
}
catch (e) {
}
}
}

Volendo possiamo implementare qualcosa di simile anche in Asp.Net 1.1:

private void AutoFocus( Control control)
{
System.Text.StringBuilder sb
= new System.Text.StringBuilder();
sb.Append(
"<script language='javascript'>{var element=document.getElementById('");
sb.Append( control.ClientID);
sb.Append(
"');if( element != null)element.focus();}</script>");
Page.RegisterStartupScript(
"AutoFocus", sb.ToString());
}

0 commenti:

Post a Comment