我有一个带有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。我使用调试器手动设置它,它工作正常。任何人都有任何明智的想法,为什么会发生这种情况?
答案 0 :(得分:5)
'cmvDate'的ValueToCompare属性的值''无法转换为'Date'类型。
此错误消息表示,在您的rangeValidator本身(不是您正在验证的控件)的验证属性ValueToCompare
中,未设置。这可以是你写下这句话:
If Not IsPostBack Then
cmvDate.ValueToCompare = DateTime.Now.ToString("d")
End If
不在Page_Init
事件中。
ValueToCompare
的代码移至Init event,同时删除对回发的检查。Not IsPostBack
的检查)。答案 1 :(得分:2)
在您的控件设置中设置type="Date"
whitch意味着您将值作为DateTime
对象进行比较,但在ValueToCompare
属性中设置string
对象,而不是DateTime
。
如果您需要按字符串进行比较 - 将控制设置type
设置为String
,
如果您需要按日期进行比较 - 请将DateTime
对象设置为ValueToCompare
控件属性和Operator="DataTypeCheck"
。
答案 2 :(得分:1)
您是否收到任何其他与ViewState相关的错误?与“视图状态MAC验证失败一样。如果此应用程序由Web场或集群托管,请确保<machineKey>
配置指定相同的validationKey和验证算法。不能在集群中使用AutoGenerate。“
如果是这样,问题可能与此MS KB article: Intermittent Invalid Viewstate Error in ASP.NET Web pages中列出的内容之一有关。
有几种情况可能会导致此问题。每个已知条件都有简短的解释和可能的解决方法 应用程序池回收
服务器场或服务器群集
表格帖子
代理服务器和病毒扫描程序
该文章中未提及的另一个可能的事情是连接速度缓慢或不可靠,从而导致用户不耐烦。我在美国托管的应用程序上工作,但很多用户来自印度。我们注意到印度用户中这类间歇性ViewState相关错误的频率要高得多。我们推测这可能是因为更长的延迟,更多的跳数,更低的带宽以及用户在页面加载完成之前与页面进行交互。