CompareValidator的间歇性错误 - ValueToCompare属性为""

Pad*_*ddy 5 vb.net asp.net validation

我有一个带有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>
Run Code Online (Sandbox Code Playgroud)

在后面的代码中,我们设置ValueToCompare属性,如下所示:

If Not IsPostBack Then

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

End If
Run Code Online (Sandbox Code Playgroud)

间歇性地(我们无法辨别模式),我们得到以下错误:

"'cmvDate'的ValueToCompare属性的值''无法转换为'Date'类型."

使用以下调用堆栈:

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) 
Run Code Online (Sandbox Code Playgroud)

我的第一个想法是日期格式奇怪,但我们使用的是英国日期,最后一次错误发生在7月18日,所以ValueToCompare设置为18/07/2011.我使用调试器手动设置它,它工作正常.任何人都有任何明智的想法,为什么会发生这种情况?

  1. 我已经检查了代码 - 没有其他地方可以设置它.
  2. 使用调试器,我在回发时进行了双重检查,并且正如预期的那样,保留了此属性值.

VMA*_*Atm 5

'cmvDate'的ValueToCompare属性的值''无法转换为'Date'类型.

此错误消息表明,在ValueToCompare您的rangeValidator本身(不是您正在验证的控件)的验证属性中,未设置.这可以是你写这行:

If Not IsPostBack Then
    cmvDate.ValueToCompare = DateTime.Now.ToString("d")   
End If
Run Code Online (Sandbox Code Playgroud)

没有Page_Init事件.

  1. 将设置代码移动ValueToCompare到Init事件,同时删除对Postback的检查.
  2. 检查数据检查期间该属性的值(可能是,您应该删除检查Not IsPostBack).
  3. 在检查发生之前设置此属性.