20

ASP.NET Login コントロール内にあるユーザー名 TextBox にフォーカスを設定しようとしています。

私はこれをいくつかの方法で実行しようとしましたが、どれも機能していないようです。ページは読み込まれていますが、コントロールに移動していません。

これが私が試したコードです。

SetFocus(this.loginForm.FindControl("UserName"));

TextBox tbox = (TextBox)this.loginForm.FindControl("UserName");
if (tbox != null)
{    
  tbox.Focus();
} // if
4

10 に答える 10

31

私は Page.Form.DefaultFocus を使用していますが、動作します:

// inside page_load, LoginUser is the Login control
Page.Form.DefaultFocus = LoginUser.FindControl("Username").ClientID;
于 2011-09-18T02:06:14.763 に答える
12

ページで ScriptManager を使用していますか? その場合は、次のことを試してください。

public void SetInputFocus()
{
    TextBox tbox = this.loginForm.FindControl("UserName") as TextBox;
    if (tbox != null)
    {
       ScriptManager.GetCurrent(this.Page).SetFocus(tbox);
    }
}

更新:これまでマルチビューを使用したことはありませんが、これを試してください:

protected void MultiView1_ActiveViewChanged(object sender, EventArgs e)
{
   SetInputFocus();
}
于 2010-06-15T08:35:52.227 に答える
1
protected void Page_Load(object sender, EventArgs e)
{
    SetFocus(LoginCntl.FindControl("UserName"));
}
于 2011-01-28T01:04:32.643 に答える
0
protected override void OnPreRender(EventArgs e)
{
        base.OnPreRender(e);
        Login.FindControl("UserName").Focus();

}
于 2013-08-13T12:55:08.790 に答える
0

LoginControl に直接フォーカスを設定すると、コントロールの最初のフィールドに自動的にフォーカスが設定されます。あなたの場合:

this.loginForm.Focus();

MSDN の詳細:方法: ASP.NET Web サーバー コントロールにフォーカスを設定する

于 2012-08-08T14:55:49.713 に答える
0

ログイン コントロールをカスタム コントロールに移動し、OnInit() メソッドで UsernameTextBox を見つけようとしたときに、問題が発生しました。コントロールの OnInit は Page の OnInit の前に実行されるため、フォーム コントロールが作成されていません。

UsernameTextBox への呼び出しを OnLoad 関数に移動したところ、正しく機能しました。

于 2013-11-18T09:26:25.483 に答える
0

私もこれに苦労しており、深くネストされたコントロール(AspDotNetStorefront aka ASPDNSFの使用など)でも非常にうまく機能するように見えるソリューションを見つけました。Page_PreRenderルーチンから呼び出される次のコードに注意してください。フォーカスしたい TextBox の名前を知っていたので、 を呼び出しFocusNestedControl(Me, "UserName")ました。ここで使用Meしたのは、すべてのルーチン ニーズがフォーカスを取得するためのコントロールの親であるためです。どちらの親でも構いません。

    Public Function FocusNestedControl(ByVal ParentControl As Control, ByVal ControlNameToFocus As String) As Control

        If ParentControl.HasControls Then
            For Each childCtrl As Control In ParentControl.Controls
                Dim goodCtrl As Control = FocusNestedControl(childCtrl, ControlNameToFocus)
                If goodCtrl IsNot Nothing Then
                    goodCtrl.Focus()
                    Return goodCtrl
                End If
            Next
        Else
            If ParentControl.ID = ControlNameToFocus Then
                ParentControl.Focus()
                Return ParentControl
            End If
        End If

        Return Nothing
    End Function
于 2011-05-03T13:44:13.273 に答える
0

次のことを試みることができます。

- 2 つのスクリプトを登録します (1 つはページが表示されたときにテキスト ボックスにフォーカスする関数を作成するため、2 番目はテキスト ボックスの ID を登録するため)。

this.Page.ClientScript.RegisterStartupScript(this.GetType(), "on_load", 
                "<script>function window_onload() \n { \n if (typeof(idLoginTextBox) == \"undefined\" || idLoginTextBox == null) \n return; \n idLoginTextBox.focus();\n } \n window.onload = window_onload; </script>");

this.Page.ClientScript.RegisterStartupScript(this.GetType(), "Focus", String.Format("<script>var idLoginTextBox=document.getElementById(\"{0}\").focus();</script>", this.loginForm.ClientID));             

その結果、コードで次のようになります。

      <script>
          function window_onload()
          {
            if (typeof(idLoginTextBox) == "undefined" || idLoginTextBox == null)
                return;     
            idLoginTextBox.focus();
        }
        window.onload = window_onload;     
      </script>   



<script>
        var idLoginTextBox=document.getElementById("ctl00_LoginTextBox").focus();
  </script>
于 2010-06-15T12:19:17.390 に答える