目标: 我有一个“EndDate”文本框,可以在用户更改它时更新。我希望能够检查/验证 EndDateTextBox.Text 中的日期并确保它小于今天的日期(格式例如:4/19/2013)。
我试过两种方法:
方法一
<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
看到它,但我当时并不知道它并想记录我的过程。当我尝试方法二时,我在调试时遇到以下错误:
无法验证 `CompareEndTodayValidator
HiddenTodayDate
引用的控件。ControlToValidate property
说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
异常详细信息:System.Web.HttpException:无法验证“CompareEndTodayValidator”的 ControlToValidate 属性引用的控件“HiddenTodayDate”。
源错误:
在执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常起源和位置的信息。
那么有没有办法以某种方式实现我的目标而不必在某处显示 DateTime.Today ?我宁愿让我的代码尽可能简单和干净,并且不使用 Javascript,但如果 Javascript 提供了唯一的解决方法,那就这样吧。代码将不胜感激。谢谢!