Вопрос по asp.net, c# – CustomValidator Метод ServerValidate не запускается

10

Я положилCustomValidator в моей форме. Я не установил егоControlToValidate имущество. В своемServerValidate В случае, если я написал следующее:

<code>protected void CustomValidator1_ServerValidate(object source,      
                                               ServerValidateEventArgs args)
{
    args.IsValid = false;
}
</code>

Я поставил точку останова на этот метод, но он, похоже, никогда не достигнет этой точки. Но если я делаю это в другой форме, это работает как шарм.

The ValidationGroup property of both the button and the CustomValidator are the same I tried deleting this property in both the button and the CustomValidator, still does not work.

Кажется, что-то в целом. Я просто положилCustomValidator на форме и не трогайте какие-либо из его свойств, кроме установки егоServerValidate метод события.

РЕДАКТИРОВАТЬ: Вот часть aspx:

<code> <asp:CustomValidator ID="CustomValidator2" runat="server" 
       ErrorMessage="This is a test" 
   onservervalidate="CustomValidator1_ServerValidate" 
   ValidationGroup="PA"></asp:CustomValidator>


<asp:Button ID="btnPensionersOK" runat="server" Text="OK" Width="75px" 
          onclick="Button1_Click" ValidationGroup="PA" />
</code>

Ваш Ответ

2   ответа
23

Попытайтесь выполнить проверку в обработчике нажатия кнопки черезPage.Validate:

protected void Button1_Click(Object sender, EventArgs e)
{
    Page.Validate();
    if(Page.IsValid)
    {
       // servervalidate should have been called
    }
}

Редактироват (из комментариев):

Если вы хотите, чтобы настраиваемый валидатор проверял, если ничего не было введено / выбрано в ваших элементах управления, вам нужно установитьValidateEmptyText до истины. Вы также можете позволиCustomValidator заменитьRequiredFieldValidators.

Я предполагаю, что порядок валидатора в aspx решает, вызывать или нет severvalidate для customvalidator, если предыдущий Validator уже сделалPage.IsValid=false. Или ASP.NET настолько умен, что предполагаSeverValidate дороже, чем простая проверка "текст пуст".

Спасибо мужчинам, мне помог ValidateEmptyText) makambi
@ MikeJM: я не знаю. Вы привязываете данные в page_load для постбэков? Вы звоните куда-нибудь ещPage.Validate()? Вы получаете какие-либо ошибки JavaScript? Предотвращают ли RequiredFieldValidators обратную передачу? Это отправляет назад вообще? Rango
@ MikeJM: Вы проверяли, действительно лиServerValidate стреляет поPage.Validate()? Rango
Но как работают другие валидаторы? У меня есть несколько RequiredFieldValidator на той же форме, но они работают нормально. И снова, я делаю то же самое в другой форме, и нет проблем, это проверяет. Дело в том, что метод ServerValidate не срабатывает. Mikayil Abdullayev
Да, я привязываю данные в page_load, но не в PostBack. Я никогда не вызываю Page.validate () где-либо еще. Я не получаю никаких ошибок javascript. RequiredFieldValidators предотвращают обратную передачу. Это отправляет назад. Mikayil Abdullayev
1

кто будет использовать CustomValidators и RequiredFieldValidators одновременно. Следует принять во внимание, что проверка на стороне клиента происходит в первую очередь. А проверка на стороне сервера произойдет только после PostBack. Я уверен, что вы получили его, но на всякий случай это не совсем понятно: это означает, что сначала все элементы управления, которые связаны с определенными работающими валидаторами на стороне клиента, должны быть действительными, чтобы разрешить Postback. После страницы. IsValid - Истинная работа на стороне сервера, и она отправляет любые изменения, включая сообщения проверки на стороне сервера.

Вот как можно заставить одновременно работать CustomVCalidators и другие встроенные валидатор

Установите обе группы валидаторов для работы на стороне клиента. В этом случае мы должны убедиться, что для пользовательских (-ых) valitor (ов) spacify сценарий, который будет выполнять проверку на стороне клиента. Без написания скрипта и простого заполнения метода ServerValidate проверка будет выполняться на сервере. Даже если для свойства EnableClientScript установлено значение True.

Установите обе группы валидаторов для работы на стороне сервера. Для этого просто установите EnableClientScript в False. Но обратите внимание, что это загрузит сервер.

Похожие вопросы