我有一个带有 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。我已经使用调试器手动设置了它,并且效果很好。有人对为什么会发生这种情况有什么好主意吗?
- 我已经检查了代码 - 没有其他地方可以设置此设置。
- 使用调试器,我在回发时进行了双重检查,正如预期的那样,该属性值被保留。
最佳答案
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
事件中。
- 将设置
ValueToCompare
的代码移至Init event ,并删除对回发的检查。 - 检查数据检查期间此属性的值是什么(可能是,您应该删除对
Not IsPostBack
的检查)。 - 在进行检查之前设置此属性。
关于asp.net - CompareValidator 出现间歇性错误 - ValueToCompare 属性为 "",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6746115/