3

目标: 我有一个“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看到它,但我当时并不知道它并想记录我的过程。当我尝试方法二时,我在调试时遇到以下错误:

无法验证 `CompareEndTodayValidatorHiddenTodayDate引用的控件。ControlToValidate property

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

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

源错误:

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

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

4

2 回答 2

8

在部分由于 Tim 的帖子而了解了 ValueToCompare 属性后,我能够四处搜索并找到一个与我的问题类似的问题,其答案几乎有效(必须将 ASP.NET 比较类型更改为字符串): 使用 CompareValidator 控件将用户输入日期与今天的日期进行比较

这是我的代码的样子:

ASP.NET:

<asp:CompareValidator ID="CompareEndTodayValidator" Operator="LessThan" type="String" ControltoValidate="EndDateTextBox" ErrorMessage="The 'End Date' must be before today" runat="server" />

。网:

(在 Page_Load 方法中)

CompareEndTodayValidator.ValueToCompare = DateTime.Now.ToShortDateString();
于 2013-05-08T20:31:40.930 回答
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()某处(fe in Page_Load)如果它不在数据绑定上下文中)

于 2013-04-19T23:25:45.623 回答