【问题标题】:Check date is Greater using Calendar control in Asp.Net使用 Asp.Net 中的日历控件检查日期更大
【发布时间】:2016-04-14 11:11:07
【问题描述】:

我的页面中有一个日历控件,当用户选择一个日期时,它应该检查所选日期是否大于今天的日期。

我尝试了很多,也用谷歌搜索了它,但在每个地方,他们都在使用文本框来获取价值,我希望用日历控件来做同样的事情。

【问题讨论】:

  • 日历控件不提供验证功能。是什么让你认为它确实如此?要验证日期,请使用 ASP.NET 验证器或自定义代码,正如您已经发现的那样。
  • 你误会了我的帖子,我想使用 Validations 并验证所选日期,并尝试使用 CompareValidator,但它不起作用
  • 哦,所以您可以使用内置验证器,但不想使用后面的代码?这是有道理的,尽管这仍然是一个奇怪的要求。您还应该发布您试图表明您确实努力自己解决问题的内容
  • 我用 CompareValidator 尝试这样的事情

标签: asp.net calendar


【解决方案1】:

与流行的看法相反,您实际上不需要任何 C# 代码来完成这项工作!您所需要的只是日期文本框中的一些扩展器和验证器。假设我有两个文本框——一个名为 txtStartDt,一个名为 txtEndDate;这就是它们的扩展的放置方式:

// Start Date
<asp:TextBox ID="txtStartDt" runat="server" CssClass="textboxint" /> // the main control itself
<ajax:CalendarExtender ID="calStartDt" runat="server" PopupPosition="BottomRight" 
 TargetControlID="txtStartDt" /> // allows the control to behave like a calendar picker
<asp:CompareValidator ID="CVStartDt" runat="server" Type="Date" Operator="LessThan"
 ErrorMessage="Start Date must come before the End Date" ValidationGroup="ReportDate"
 ControlToValidate="txtStartDt" ControlToCompare="txtEndDt" Display="None" /> // THIS is the main solution to your problem
<ajax:ValidatorCalloutExtender ID="VCEStartDt" runat="server" TargetControlID="CVStartDt"
 HighlightCssClass="valCalloutint" /> // Checks that the CV is working correctly
<asp:RequiredFieldValidator ID="RFVStartDt" runat="server" ControlToValidate="txtStartDt"
 Display="None" ErrorMessage="Start Date is required" ValidationGroup="ReportDate" /> // ensures a value was added to the textbox
<ajax:ValidatorCalloutExtender ID="VCEreqStartDt" runat="server" TargetControlID="RFVStartDt"
HighlightCssClass="valCalloutint" PopupPosition="BottomRight" /> // Checks that the RFV is working correctly

// End Date
<asp:TextBox ID="txtEndDt" runat="server" CssClass="textboxint" />
<ajax:CalendarExtender ID="calEndDt" runat="server" PopupPosition="BottomRight" TargetControlID="txtEndDt" />
<asp:CompareValidator ID="CVEndDt" runat="server" Type="Date" Operator="GreaterThan"
 ErrorMessage="End Date must come after the Start Date" ValidationGroup="ReportDate"
 ControlToValidate="txtEndDt" ControlToCompare="txtStartDt" Display="None" />
<ajax:ValidatorCalloutExtender ID="VCEEndDt" runat="server" TargetControlID="CVEndDt"
 HighlightCssClass="valCalloutint" />
<asp:RequiredFieldValidator ID="RFVEndDt" runat="server" ControlToValidate="txtEndDt"
 Display="None" ErrorMessage="End Date is required" ValidationGroup="ReportDate" />
<ajax:ValidatorCalloutExtender ID="VCEreqEndDt" runat="server" TargetControlID="RFVEndDt"
 HighlightCssClass="valCalloutint" PopupPosition="BottomRight" />

请注意,额外的 ValidatorCalloutExtender 工具并不是多余的,但实际上允许程序阻止用户为其中一个文本框输入空值。 希望这会有所帮助!

【讨论】:

    【解决方案2】:

    日历控件应该有一个名为SelectedDate 的属性。您可以将此属性与任何其他 DateTime 属性进行比较。下面的代码 sn-p 将检查 SelectedDate 是否大于今天。

    if (Calendar.SelectedDate > DateTime.Now())
    {
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-02
      • 2017-01-07
      • 1970-01-01
      • 2016-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多