Установите фокус на текстовое поле из кода после проверки входных данных в веб-приложении asp.net

Что я хочу сделать, так это проверить данный ввод пользователем, а затем установить фокус на недопустимый ввод в текстовом поле.

Моя функция кнопки сохранения приведена ниже.

protected void btnSave_OnClick(object sender, EventArgs e)
{
    try
    {          
        if (ValidateForm())
        {
            Users objUser = new Users();
            objUser.Username = this.txtUsername.Text;
            objUser.Password = this.txtPassword.Text;
            objUser.Add();

            this.labelMessage.Text = "User has been saved successfully";
        }
    }
    catch (Exception ex)
    {
        Monitoring.WriteException(ex);
    }
}

Функция проверки для проверки того, что данный ввод не является нулевым или пустым.

private bool ValidateForm()
{
    bool isvalidate = true;

    try
    {
        string username = this.txtUsername.Text;
        string password = this.txtPassword.Text;

        if (username == "" || username == string.Empty)
        {
            this.labelMessage.Text = "Please enter username";
            this.txtUsername.Focus();
            isvalidate = false;
        }
        else if (password == "" || password == string.Empty)
        {
            this.labelMessage.Text = "Please enter password";
            this.txtPassword.Focus();
            isvalidate = false;
        }
    }
    catch (Exception ex)
    {
        Monitoring.WriteException(ex);
    }
    return isvalidate;
}

Проблема в том, что я не могу установить фокус на любое текстовое поле после проверки. Кто-нибудь знает, где я ошибаюсь? Или есть другой лучший способ? Я много искал, но большинство из них фокусировались на загрузке страницы (обратной публикации). Я хочу сделать это из кода позади.


person Community    schedule 13.03.2014    source источник


Ответы (1)


Попробуйте следующий код. Используйте этот код в своем коде позади. И передайте идентификатор текстового поля функции SetFocus. Это обязательно решит вашу проблему.

Замените этот код

this.txtUsername.Focus();

С этим кодом

ScriptManager.GetCurrent(this.Page).SetFocus(this.txtUsername);

Ниже приведен проверенный код.

private bool ValidateForm()
{
    bool isvalidate = true;

    try
    {
        string username = this.txtUsername.Text;
        string password = this.txtPassword.Text;

        if (username == "" || username == string.Empty)
        {
            this.labelMessage.Text = "Please enter username";
            ScriptManager.GetCurrent(this.Page).SetFocus(this.txtUsername);
            isvalidate = false;
        }
        else if (password == "" || password == string.Empty)
        {
            this.labelMessage.Text = "Please enter password";
            ScriptManager.GetCurrent(this.Page).SetFocus(this.txtPassword);
            isvalidate = false;
        }
    }
    catch (Exception ex)
    {
        Monitoring.WriteException(ex);
    }
    return isvalidate;
}
person Suhaib Janjua    schedule 13.03.2014