开发者

Set focus to textbox in ASP.NET Login control on page load

开发者 https://www.devze.com 2023-01-03 17:24 出处:网络
I am trying to set the focus to the user name TextBox which is inside an ASP.NET Login control. I have tried to do this a couple of ways but none seem to be working.The page is loading but not going

I am trying to set the focus to the user name TextBox which is inside an ASP.NET Login control.

I have tried to do this a couple of ways but none seem to be working. The page is loading but not going to the control.

Here is the code I've tried.

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

And

TextBox tbox = (TextBox)this.loginForm.FindControl("UserName");
if (tbox != null)
开发者_JAVA技巧{    
  tbox.Focus();
} // if


I'm using Page.Form.DefaultFocus and it works:

// inside page_load, LoginUser is the Login control
Page.Form.DefaultFocus = LoginUser.FindControl("Username").ClientID;


Are you using a ScriptManager on the Page? If so, try the following:

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

Update: Never used a multiview before, but try this:

protected void MultiView1_ActiveViewChanged(object sender, EventArgs e)
{
   SetInputFocus();
}


protected void Page_Load(object sender, EventArgs e)
{
    SetFocus(LoginCntl.FindControl("UserName"));
}


You may try to do the following:

-Register two scripts (one to create a function to focus on your texbox when page is displayed, second to register id of the textbox)

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));             

As the result you should get the following in your code:

      <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>


I've been struggling with this too and I've found a solution that seems to work very well even with deeply nested controls (like AspDotNetStorefront a.k.a. ASPDNSF uses). Note the following code called from the Page_PreRender routine. I knew the name of the TextBox I wanted to give focus to and so I just called FocusNestedControl(Me, "UserName"). I just used Me here because all the routine needs is a parent of the control to get focus; it doesn't matter which parent.

    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


You can set focus directly on LoginControl and it will automatically set focus on first field in control. In your case:

this.loginForm.Focus();

More info on MSDN: How to: Set Focus on ASP.NET Web Server Controls


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

}


My problem arrized when i moved login control to a custom control and tried to find UsernameTextBox at the OnInit() method. OnInit of a control is executed before OnInit of Page and this is why no Form control have been created.

I moved the call to UsernameTextBox to the OnLoad function and it worked correctly.


None of the above answers worked for me, so I simply tried:

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

... and it worked!
With an ASP TextBox defined as:

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


You must put your textbox inside this code on ASP.NET

<form id="WHATEVERYOUWANT" runat="server" method="post">
 <div>
  <!-- Put your code here--> 
 </div>
</form>
0

精彩评论

暂无评论...
验证码 换一张
取 消