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 establecer el enfoque directamente en LoginControl y automáticamente establecerá el enfoque en el primer campo en control. En tu caso:
this.loginForm.Focus();
Más información en MSDN: Cómo establecer el enfoque en los controles del servidor web ASP.NET
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"));
}