目标: 我有一个'EndDate'TextBox,可以根据用户更改它进行更新。我希望能够在EndDateTextBox.Text中检查/验证日期,并确保它低于今天的日期(格式为ex:2013年4月19日)。
我尝试了两种方法:
方法一
<asp:TextBox ID="HiddenTodayDate" Visible = "false" runat="server" />
<asp:CompareValidator ID="CompareEndTodayValidator" Operator="GreaterThan" Type="Date"
ControlToValidate="HiddenTodayDate" ControlToCompare="EndDateTextBox"
ErrorMessage="'End Date' must be before today's date" runat="server" />
以下是我的Page_Load方法:
HiddenTodayDate.Text = DateTime.Today.ToShortDateString();
方法二
<asp:HiddenField ID="HiddenTodayDate" runat="server" />
<asp:CompareValidator ID="CompareEndTodayValidator" Operator="GreaterThan" Type="Date"
ControlToValidate="HiddenTodayDate" ControlToCompare="EndDateTextBox"
ErrorMessage="'End Date' must be before today's date" runat="server" />
以下是我的Page_Load方法:
HiddenTodayDate.Value = DateTime.Today.ToShortDateString();
对于明智的代码,显然将TextBox
设置为false可防止Validator
同时看到它,但我当时并不知道它并希望记录我的过程。当我尝试方法二时,我在调试时遇到以下错误:
HiddenTodayDate
引用的控件ControlToValidate property
“CompareEndTodayValidator”无法验证。描述:执行期间发生了未处理的异常 当前的网络请求。请查看堆栈跟踪了解更多信息 有关错误的信息以及它在代码中的起源。
异常详细信息:System.Web.HttpException:Control'HiddenTodayDate' 由ControlToValidate属性引用 “CompareEndTodayValidator”无法验证。
来源错误:
执行期间生成了未处理的异常 当前的网络请求。有关的来源和位置的信息 可以使用下面的异常堆栈跟踪来识别异常。
那么有没有办法以某种方式实现我的目标而不必显示DateTime.Today某处?我宁愿保持我的代码尽可能简单和干净,而不是使用Javascript,但如果Javascript提供唯一的解决方法,那么就这样吧。代码将不胜感激。谢谢!
答案 0 :(得分:6)
在得知ValueToCompare属性部分归因于Tim的帖子之后,我能够搜索并找到类似于我的问题并得到一个几乎有效的答案(必须将ASP.NET比较类型更改为String): Using the CompareValidator control to compare user input date with today's date
以下是我的代码:
ASP.NET:
<asp:CompareValidator ID="CompareEndTodayValidator" Operator="LessThan" type="String" ControltoValidate="EndDateTextBox" ErrorMessage="The 'End Date' must be before today" runat="server" />
.NET:
(在Page_Load方法中)
CompareEndTodayValidator.ValueToCompare = DateTime.Now.ToShortDateString();
答案 1 :(得分:4)
您可以通过编程方式将ValueToCompare
属性设置为今天:
<asp:comparevalidator runat="server" Id="CompareEndTodayValidator"
errormessage="The date must be less than today"
controltovalidate="EndDate" type="Date" Operator="LessThan"
ValueToCompare="<%= DateTime.Today.ToShortDateString() %>" />
(未经过测试,如果<%=
无法使用<%#
,那么您必须记得在Page.DataBind()
某处(如Page_Load
中)调用{{1}}在数据绑定上下文中)