Подтвердить что ты не робот

Установите фокус на текстовое поле в элементе управления ASP.NET при загрузке страницы

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

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

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

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

и

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

Ответ 1

Используете 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();
}

Ответ 2

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

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

Ответ 3

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

Ответ 4

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

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

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>

Ответ 5

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

Ответ 7

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

}

Ответ 8

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

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

Ответ 9

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

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>