asp.net - CompareValidator 出现间歇性错误 - ValueToCompare 属性为 ""

标签 asp.net vb.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>

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

If Not IsPostBack Then

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

End If

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

“‘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) 

我的第一个想法是日期格式有些奇怪,但我们使用的是英国日期,最后一个错误是在 7 月 18 日,因此 ValueToCompare 设置为 18/07/2011。我已经使用调试器手动设置了它,并且效果很好。有人对为什么会发生这种情况有什么好主意吗?

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

最佳答案

The value '' of the ValueToCompare property of 'cmvDate' cannot be converted to type 'Date'.

此错误消息表示,在验证时,您的 rangeValidator 本身(而不是您正在验证的控件)的属性 ValueToCompare 未设置。如果您写了以下几行,则可能是这样:

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

不在 Page_Init 事件中。

  1. 将设置ValueToCompare的代码移至Init event ,并删除对回发的检查。
  2. 检查数据检查期间此属性的值是什么(可能是,您应该删除对 Not IsPostBack 的检查)。
  3. 在进行检查之前设置此属性。

关于asp.net - CompareValidator 出现间歇性错误 - ValueToCompare 属性为 "",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6746115/

相关文章:

c# - 基于当前用户的 "Role"动态构建 ASP.NET MVC 母版页菜单

vb.net - 如何反转这个算法来找回原文呢?

java - Grails:在非抽象类中不能有抽象方法错误

javascript - 如何使用 onClick JQuery 函数运行 HTML 验证?

javascript - AngularJS - 验证输入字段的动态模式

c# - 长字符串的多子字符串

C# REST webservice认证问题

c# - asp.net core 2.2 或 3 中 try catch 的全局异常

vb.net - 可编程独立按钮(硬件+软件)

wpf - 以编程方式为 DataGrid 创建 WPF DataGridTemplateColumn