2015-01-15 2 views
0
protected void dropDownList_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    if (CompareValidatorInputTextBox1.IsValid && CompareValidatorInputTextBox2.IsValid) 
    { 

     foo(); 
     blah(); 
    } 
} 

Здравствуйте. Я пытаюсь взять только числа в две коробки. На странице появляется сообщение «Validator», в котором сообщается, что недопустимые номера недействительны. Однако, когда я пытаюсь использовать значения после выбора операции, свойство isValid всегда имеет значение true, даже если средство проверки textBox говорит, что оно неверно. Я новичок в asp.net, поэтому я немного смущен.Validator.IsValid верен, даже если значение недействительно

Вот один из текстовых полей из моего .aspx файла:

<asp:TextBox ID="inputTextBox1" runat="server" /> 
<asp:CompareValidator 
    ID="CompareValidatorInputTextBox1" 
    runat="server" 
    ControlToValidate="inputTextBox1" 
    CausesValidation="True" 
    operator="DataTypeCheck" 
    Type="Double" 
    ErrorMessage="Invalid Number" 
    ForeColor="Red" 
    ></asp:CompareValidator><br /> 

Спасибо за любую помощь вы могли бы быть в состоянии дать.

+1

Что вы подразумеваете под «когда я пытаюсь использовать значения после выбора операции»? – derape

+0

А это неясно. Я обновлю текст. Я хочу сказать, что я пытаюсь использовать значения в обработчике событий, который является верхним кодом. Но когда я пытаюсь использовать их, даже если они были недействительны на моей странице .aspx, свойство Validator.IsValid имеет значение true. –

+1

В документации [MSDN] (http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.basevalidator.isvalid (v = vs.110) .aspx) говорится, что метод 'Validate' должен быть вызван для свойства 'IsValid' для обновления. Вы уверены, что это было сделано в то время, когда вы проверяете его в коде? –

ответ

2

Вы можете заставить вызов проверки с помощью вызова метода проверки на каждом валидатора:

protected void dropDownList_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    CompareValidatorInputTextBox1.Validate(); 
    CompareValidatorInputTextBox2.Validate(); 
    if (CompareValidatorInputTextBox1.IsValid && CompareValidatorInputTextBox2.IsValid) 
    { 
     foo(); 
     blah(); 
    } 
} 

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

+0

Я не думаю, что у меня есть несколько групп проверки. Я до сих пор новичок в этом, но это может быть вызвано CausesValidation = "true"? Спасибо за ваш ответ, это то же самое, что и @MikeofSST, упомянутое выше, и оно работает. –

+0

Возможно, вы не установили CausesValidation = "true" в раскрывающемся списке. Насколько я знаю, это может быть вызвано отсутствием этого флага. Однако я не уверен, по умолчанию этот флаг не соответствует действительности. Иногда некоторые вещи не работают так, как им нужно, и принудительная проверка - неплохой способ исправить это. – Landeeyo

Смежные вопросы