如何通过render事件禁用CalendarExtender控件中的先前日期?

时间:2011-04-09 21:32:19

标签: asp.net ajaxcontroltoolkit

基本上,我只想让选择日期大于今天。我更喜欢这种方式来避免显示警告信息。

2 个答案:

答案 0 :(得分:7)

我认为当前版本的Toolkit不支持限制可选日期。这是处理ClientDateSelectedChanged - 事件并验证所选日期的简单解决方法:

  

如何确保用户不会选择比今天更早或更早的日期

可能存在您不希望用户选择比当前日期早一天的情况。例如:当您向用户提供表单以预订票证时,您不希望他选择较早的日期。要达到此要求,请使用以下javascript代码。

  

阻止用户选择比今天更早的日期

<head runat="server">
    <title>Calendar Extender</title>
    <script type="text/javascript">

    function checkDate(sender,args)
    {
        if (sender._selectedDate < new Date())
        {       
            alert("You cannot select a day earlier than today!");
            sender._selectedDate = new Date(); 
            // set the date back to the current date
            sender._textbox.set_Value(sender._selectedDate.format(sender._format))
         }
    }
    </script>
</head>

调用代码:

<form id="form1" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server" />
        <div>

            <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
            <cc1:CalendarExtender ID="CalendarExtender1"
            runat="server" OnClientDateSelectionChanged="checkDate" TargetControlID="TextBox1" />

        </div>
    </form>
  

选择日期大于今天

在javascript中,只需更改此行即可 sender._selectedDate > new Date() 注意:您可能会争辩说,用户仍然可以通过在文本框中输入或输入无效日期来更改日期。那么可以使用ValidationControl轻松处理,并在下一篇文章中介绍。

  

向CalendarExtender控件添加验证

向日历添加验证的一种简单方法是将ValidationControl添加到与CalendarExtender关联的文本框中。你有两个选择:

  1. Extender添加ValidationControl。为此,请拖放ValidationControl&gt;点击ValidationControl&gt;的智能标记选择Add Extender。从Extender向导中,选择ValidatorCalloutExtender。使用此方法可以非常轻松地将控件扩展器发现并附加到控件上。在VS 2005中,您必须通过连接控制扩展器手动执行此过程。
  2. 您可以选择不添加Extender。 我们将继续使用选项A.我们将向ValidationControls添加两个TextBox。第一个是CompareValidator来检查用户是否没有输入无效日期(例如:5月32日),第二个是RangeValidator来保持日期范围。
  3. 添加CompareValidator

    <asp:CompareValidator ID="CompareValidator1" runat="server"
                    ControlToValidate="TextBox1" Display="Dynamic" ErrorMessage="Invalid Date"
                    Operator="DataTypeCheck" Type="Date">
    </asp:CompareValidator>
    <cc1:ValidatorCalloutExtender ID="CompareValidator1_ValidatorCalloutExtender"
                    runat="server" Enabled="True" TargetControlID="CompareValidator1">
    </cc1:ValidatorCalloutExtender>
    Adding RangeValidator – We will restrict the user to select a date range starting from today to 15 days from now.
    <asp:RangeValidator ID="RangeValidator1" runat="server"
                    ControlToValidate="TextBox1" ErrorMessage="RangeValidator"
                    Type="Date">
    </asp:RangeValidator>
    <cc1:ValidatorCalloutExtender ID="RangeValidator1_ValidatorCalloutExtender"
                    runat="server" Enabled="True" TargetControlID="RangeValidator1">
    </cc1:ValidatorCalloutExtender>
    

    在页面后面的代码中,添加此代码 C#

    protected void Page_Load(object sender, EventArgs e)
    {
        RangeValidator1.MinimumValue = System.DateTime.Now.ToShortDateString();
        RangeValidator1.MaximumValue = System.DateTime.Now.AddDays(15).ToShortDateString();
    }
    

    VB.NET

     Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
            RangeValidator1.MinimumValue = System.DateTime.Now.ToShortDateString()
            RangeValidator1.MaximumValue = System.DateTime.Now.AddDays(15).ToShortDateString()
     End Sub
    

    那些是与CalendarExtender相关的一些提示。随着工具包的未来版本的发布,我们应该希望有更简单的方法来实现这一功能。

    来自http://www.dotnetcurry.com/ShowArticle.aspx?ID=149


    另一种高级方法是扩展CalendarExtender javascript,但是你有自己的ajax工具包的自定义版本。

    http://codegoeshere.blogspot.com/2007/06/extending-calendarextender.html

答案 1 :(得分:2)

在页面加载中将日历扩展器的StartDate属性设置为DateTime.Now.Date 这将显示以前的日期为无法选择