2013-08-15 4 views
2

У меня есть 2 текстовых поля, один для входа другой для пароля.
У меня есть 1 настраиваемый валидатор на стороне сервера, если пароль введен неправильно, валидатор уволен.
Я хочу настроить фокус на этом сообщении об ошибке.set focus on custom validator

Я пробовал focus() и setfocusonerror собственности тоже. но он не работает.

вот мой код:

<asp:CustomValidator ID="cvLogin" 
         runat="server" 
         Display="Dynamic" 
         CssClass="login-req" 
         OnServerValidate="cvLogin_ServerValidate" 
         ValidationGroup="tovalidate" 
         SetFocusOnError="True"> 
</asp:CustomValidator> 





protected void cvLogin_ServerValidate(object source, 
ServerValidateEventArgs args) 
     { 
if (currentUser == null) 
       { 
        args.IsValid = false; 
        MessageBox1.Focus(); 
        MessageBox1.SetMessage(Resources.RSResource.Login_InvalidLogin, 
Constants.MessageType.Error); 

       } 

ответ

2

Попробуйте SetFocus метод Page:

if (currentUser == null) 
{ 
     args.IsValid = false; 
     Page.SetFocus(MessageBox1); 
     ... 
} 

Я не уверен. Но, возможно, вам нужно разместить свой контроль на Panel.

ОБНОВЛЕНИЕ 2:

Я проверил SetFocus метод. Он работает для TextBoxes, но не работает для Labels или Validators. Так что если вы хотите, чтобы установить фокус на сообщение лучший выбор использует JavaScript:

document.getElementById('MessageBox1').scrollIntoView(true); 

Я также проверил это на стороне сервера код. Он отлично работает:

Page.ClientScript.RegisterStartupScript(this.GetType(), "FocusScript", "document.getElementById('MessageBox1').scrollIntoView(true);", true); 
+0

ok.is есть какой-либо метод для фокусировки на нижней части страницы. поскольку мое сообщение отображается внизу –

+0

См. обновление моего ответа. Я протестировал его. – algreat

+0

ОК спасибо, что работает –