如何使用DateTime.Today比较验证器对TextBox.Text?

Kur*_*ner 2 .net javascript c# asp.net validation

目标: 我有一个'EndDate'文本框,可以根据用户更改它进行更新.我希望能够在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" />
Run Code Online (Sandbox Code Playgroud)

以及我的Page_Load方法中的以下内容:

HiddenTodayDate.Text = DateTime.Today.ToShortDateString();
Run Code Online (Sandbox Code Playgroud)

方法二

<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" />
Run Code Online (Sandbox Code Playgroud)

以及我的Page_Load方法中的以下内容:

HiddenTodayDate.Value = DateTime.Today.ToShortDateString();
Run Code Online (Sandbox Code Playgroud)

明智地将代码设置TextBox为false可以防止Validator看到它,但我当时并不知道它并且想要记录我的进程.当我尝试方法二时,我在调试时遇到以下错误:

无法验证HiddenTodayDateControlToValidate property`CompareEndTodayValidator 引用的控件.

描述:执行当前Web请求期间发生未处理的异常.请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息.

异常详细信息:System.Web.HttpException:无法验证由"CompareEndTodayValidator"的ControlToValidate属性引用的控件"HiddenTodayDate".

来源错误:

在执行当前Web请求期间生成了未处理的异常.可以使用下面的异常堆栈跟踪来识别有关异常的起源和位置的信息.

那么有没有办法以某种方式实现我的目标,而不必显示DateTime.Today某处?我宁愿保持我的代码尽可能简单和干净,而不是使用Javascript,但如果Javascript提供唯一的解决方法,那么就这样吧.代码将不胜感激.谢谢!

Kur*_*ner 6

在得知ValueToCompare属性部分归因于Tim的帖子之后,我能够搜索并找到类似于我的问题并得到一个几乎有效的答案(必须将ASP.NET比较类型更改为String): 使用CompareValidator控件将用户输入日期与今天的日期进行比较

这是我的代码的样子:

ASP.NET:

<asp:CompareValidator ID="CompareEndTodayValidator" Operator="LessThan" type="String" ControltoValidate="EndDateTextBox" ErrorMessage="The 'End Date' must be before today" runat="server" />
Run Code Online (Sandbox Code Playgroud)

.净:

(在Page_Load方法中)

CompareEndTodayValidator.ValueToCompare = DateTime.Now.ToShortDateString();
Run Code Online (Sandbox Code Playgroud)