コードビハインドの Focus メソッドと WebForm_AutoFocus メソッド

スポンサーリンク

ASP.NET のコードビハインドで下記コードを呼び出すと、出力結果の TextBox にはフォーカスが設定されています。

protected void Page_Load(object sender, EventArgs e)
{
this.TextBox1.Focus();
}

これはサーバーサイドでフォーカスを直接当てているのではなく、次の工程を経ているようです。

1.サーバーサイドでフォーカスを行うための JavaScript を生成
2.クライアントサイドで JavaScript を読み込み
3.JavaScript の呼び出し

出力されている HTML を見てみると、WebForm_AutoFocus メソッドが ASP.NET によって自動生成されています。

<script type="text/javascript">
//<![CDATA[
WebForm_AutoFocus('TextBox1');//]]>
</script>

WebForm_AutoFocus は ASP.NET が生成する axd の中に記述がありました。確かにこの中を読むと引数で渡されたコントロールにフォーカスを設定しています。

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) {
}
}
}

Client-Side Enhancements in ASP.NET 2.0
http://aspnet.4guysfromrolla.com/articles/111506-1.aspx

コメント

タイトルとURLをコピーしました