2014年6月23日月曜日

コードビハインドの 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

0 件のコメント:

コメントを投稿