web-dev-qa-db-ja.com

ページ読み込み時にASP.NETログインコントロールのテキストボックスにフォーカスを設定する

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

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

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

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

そして

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

ページで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();
}
10
djdd87

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

// inside page_load, LoginUser is the Login control
Page.Form.DefaultFocus = LoginUser.FindControl("Username").ClientID;
29
Hoang Tran
protected void Page_Load(object sender, EventArgs e)
{
    SetFocus(LoginCntl.FindControl("UserName"));
}
1
Rekha

上記の答えのどれも私にとってうまくいかなかったので、私は単に試しました:

protected void Page_Load(object sender, EventArgs e) {
    // This works for me
    TxtMyTextBoxName.Focus();
}

...そしてそれはうまくいった!
ASP TextBoxを次のように定義した場合:

<asp:TextBox ID="TxtMyTextBoxName" type="search" runat="server"></asp:TextBox>
0
LePatay

私もこれに苦労しており、深くネストされたコントロール(AspDotNetStorefront a.k.a. 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
_
0
cjbarth

次のことを試してみてください:

-2つのスクリプトを登録します(1つは、ページが表示されたときにtexboxにフォーカスする関数を作成するためのもので、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>
0
Konrad

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

this.loginForm.Focus();

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

0
marisks
protected override void OnPreRender(EventArgs e)
{
        base.OnPreRender(e);
        Login.FindControl("UserName").Focus();

}
0
Mario

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

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

0
Menelaos Vergis