Периодическая ошибка с CompareValidator - свойство ValueToCompare "" - PullRequest
5 голосов
/ 19 июля 2011

У меня есть страница с CompareValidator:

<asp:textbox id="txtResponseDate" runat="server" />
<asp:requiredfieldvalidator id="rfvResponseDate" runat="server"
                        controltovalidate="txtResponseDate"
                        display="Dynamic"
                        errormessage="Date is required."
                        setfocusonerror="true">
                    </asp:requiredfieldvalidator>
<asp:comparevalidator id="cmvDate" runat="server"
                        controltovalidate="txtResponseDate"
                        display="Dynamic"
                        errormessage="Date must not be before today."
                        operator="GreaterThanEqual"
                        setfocusonerror="true"
                        type="Date">
                    </asp:comparevalidator>

В коде мы устанавливаем свойство ValueToCompare следующим образом:

If Not IsPostBack Then

    cmvDate.ValueToCompare = DateTime.Now.ToString("d")   

End If

Периодически (мы не можем различить образец), мы получаем следующую ошибку:

«Значение» свойства ValueToCompare «cmvDate» не может быть преобразовано в тип «Дата». "

Со стеком вызовов:

at System.Web.UI.WebControls.CompareValidator.ControlPropertiesValid() 
at System.Web.UI.WebControls.BaseValidator.get_PropertiesValid() 
at System.Web.UI.WebControls.BaseValidator.Validate() 
at System.Web.UI.Page.Validate() 
at System.Web.UI.Page.Validate(String validationGroup) 
at System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) 

Моей первой мыслью было что-то странное с форматом даты, но мы используем даты в Великобритании, последняя ошибка была 18 июля, поэтому ValueToCompare установлено на 18/07/2011. Я установил это вручную с помощью отладчика, и он работал нормально. У кого-нибудь есть яркие идеи относительно того, почему это может происходить?

  1. Я проверил код - больше нигде это не устанавливается.
  2. Используя отладчик, я дважды проверил при обратной передаче, и, как и ожидалось, это значение свойства сохраняется.

Ответы [ 3 ]

5 голосов
/ 19 июля 2011

Значение '' свойства ValueToCompare 'cmvDate' не может быть преобразовано в тип 'Дата'.

В этом сообщении об ошибке говорится, что в момент проверки свойство ValueToCompareсамого вашего rangeValidator (а не элемента управления, который вы проверяете) не установлен.Это может быть, если вы написали следующие строки:

If Not IsPostBack Then
    cmvDate.ValueToCompare = DateTime.Now.ToString("d")   
End If

не в событии Page_Init.

  1. Переместите код установки ValueToCompare в событие Init, с удалением чека на обратную передачу.
  2. Проверьте, какое значение имеет это свойство при проверке данных (может быть, вы должны удалить чек для Not IsPostBack).
  3. Установить это свойстводо проверки.
2 голосов
/ 13 декабря 2011

В настройках управления вы устанавливаете type="Date", что означает, что вы будете сравнивать значение как объект DateTime, но в свойстве ValueToCompare вы устанавливаете объект string, а не DateTime.

Если вам нужно сравнивать по строкам - установите для параметра управления type значение String, Если вам нужно сравнить по датам - установите для объекта DateTime свойство элемента управления ValueToCompare и Operator="DataTypeCheck".

1 голос
/ 31 июля 2011

Получаете ли вы другие ошибки, связанные с ViewState? Например, « Проверка MAC состояния представления завершена неудачно. Если это приложение размещено на веб-ферме или в кластере, убедитесь, что в конфигурации <machineKey> указан один и тот же ключ validationKey и алгоритм проверки. AutoGenerate нельзя использовать в кластере. »?

Если это так, возможно, проблема связана с одной из вещей, перечисленных в этой статье MS KB: прерывистая недопустимая ошибка состояния просмотра на веб-страницах ASP.NET .

Есть несколько условий, которые могут вызвать эту проблему. Каждое известное условие представлено с кратким объяснением и возможным обходным путем.
Переработка пула приложений
Фермы серверов или кластеры серверов
Форма сообщений
Прокси-серверы и антивирусные сканеры

Еще одна возможная вещь, не упомянутая в этой статье, - это медленное или ненадежное соединение и, как следствие, нетерпение пользователей. Я работал над приложением, размещенным в США, но многие пользователи из Индии. Мы заметили гораздо большую частоту таких типов периодических ошибок, связанных с ViewState, среди пользователей в Индии. Мы предположили, что это могло произойти из-за более высокой задержки, большего количества прыжков, более низкой пропускной способности и пользователей, взаимодействующих со страницами до завершения загрузки страницы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...