Установить фокус на текстовое поле в элементе управления входом ASP.NET при загрузке страницы - PullRequest
18 голосов
/ 15 июня 2010

Я пытаюсь установить фокус на имя пользователя TextBox, которое находится внутри элемента управления ASP.NET Login.

Я пытался сделать это несколькими способами, но, похоже, ни один из них не работает. Страница загружается, но не переходит к элементу управления.

Вот код, который я пробовал.

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

И

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

Ответы [ 9 ]

29 голосов
/ 18 сентября 2011

Я использую Page.Form.DefaultFocus, и он работает:

// inside page_load, LoginUser is the Login control
Page.Form.DefaultFocus = LoginUser.FindControl("Username").ClientID;
10 голосов
/ 15 июня 2010

Используете ли вы 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();
}
1 голос
/ 28 января 2011
protected void Page_Load(object sender, EventArgs e)
{
    SetFocus(LoginCntl.FindControl("UserName"));
}
0 голосов
/ 18 января 2018

Ни один из приведенных выше ответов не работал для меня, поэтому я просто попытался:

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 голосов
/ 18 ноября 2013

Моя проблема возникла, когда я переместил элемент управления для входа в пользовательский элемент управления и попытался найти UsernameTextBox с помощью метода OnInit (). OnInit элемента управления выполняется до OnInit страницы, и поэтому элемент управления Form не был создан.

Я переместил вызов UsernameTextBox в функцию OnLoad, и он работал правильно.

0 голосов
/ 13 августа 2013
protected override void OnPreRender(EventArgs e)
{
        base.OnPreRender(e);
        Login.FindControl("UserName").Focus();

}
0 голосов
/ 08 августа 2012

Вы можете установить фокус непосредственно на LoginControl, и он автоматически установит фокус на первое поле в контроле.В вашем случае:

this.loginForm.Focus();

Дополнительная информация о MSDN: Как настроить фокус на элементах управления веб-сервера ASP.NET

0 голосов
/ 03 мая 2011

Я тоже боролся с этим, и я нашел решение, которое, кажется, работает очень хорошо даже с глубоко вложенными элементами управления (как 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 голосов
/ 15 июня 2010

Вы можете попробовать сделать следующее:

-Регистрация двух скриптов (один для создания функции для фокусировки на вашем текстовом поле при отображении страницы, второй для регистрации идентификатора текстового поля)

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