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

时间:2013-04-19 23:13:45

标签: c# javascript asp.net .net validation

目标: 我有一个'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提供唯一的解决方法,那么就这样吧。代码将不胜感激。谢谢!

2 个答案:

答案 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}}在数据绑定上下文中)