net aspxtextbox asp asp.net login pageload setfocus

asp.net - aspxtextbox - placeholder asp net textbox c#



Establecer el foco en el cuadro de texto en el control de inicio de sesión de ASP.NET en la carga de la página (9)

Estoy intentando establecer el foco en el nombre de usuario TextBox que está dentro de un control de inicio de sesión de ASP.NET.

He intentado hacer esto de un par de maneras, pero ninguna parece estar funcionando. La página se está cargando pero no va al control.

Aquí está el código que he probado.

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

Y

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


¿Está utilizando un ScriptManager en la página? Si es así, intente lo siguiente:

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

Actualización: nunca usé una vista múltiple antes, pero intente esto:

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


Estoy usando Page.Form.DefaultFocus y funciona:

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


Mi problema llegó cuando moví el control de inicio de sesión a un control personalizado e intenté encontrar UsernameTextBox en el método OnInit (). OnInit de un control se ejecuta antes de OnInit of Page y es por eso que no se ha creado un control de formulario.

Moví la llamada a UsernameTextBox a la función OnLoad y funcionó correctamente.


Ninguna de las respuestas anteriores funcionó para mí, así que simplemente intenté:

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

... ¡Y funcionó!
Con un cuadro de texto ASP definido como:

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



Puede intentar hacer lo siguiente:

-Registre dos scripts (uno para crear una función que se enfoque en su cuadro de texto cuando se muestre la página, el segundo para registrar la identificación del cuadro de texto)

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

Como resultado debes obtener lo siguiente en tu código:

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


También he estado luchando con esto y he encontrado una solución que parece funcionar muy bien incluso con controles profundamente anidados (como AspDotNetStorefront, también conocido como ASPDNSF). Tenga en cuenta el siguiente código llamado de la rutina Page_PreRender . Sabía el nombre del TextBox al que quería enfocar, así que llamé FocusNestedControl(Me, "UserName") . Simplemente me usé aquí porque todas las necesidades de rutina son un padre del control para obtener el enfoque; no importa cual padre

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


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


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