Как отключить предыдущие даты в элементе управления CalendarExtender через его событие рендера? - PullRequest
3 голосов
/ 10 апреля 2011

По сути, я просто хочу разрешить выбирать даты больше, чем сегодня. Я бы предпочел этот способ, чтобы избежать показа предупреждающих сообщений.

Ответы [ 2 ]

7 голосов
/ 10 апреля 2011

Я не думаю, что он поддерживается в текущей версии 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> щелчок по смарт-тегу ValidationControl> и выберите Add Extender. В мастере расширителя выберите ValidatorCalloutExtender. Использование этого подхода делает чрезвычайно простым обнаружение и подключение расширителей элементов управления к элементам управления. В VS 2005 вы должны были выполнить этот процесс вручную, подключив расширители управления.
  2. Вы можете не добавлять расширитель. Мы продолжим с вариантом А. Мы будем добавлять два ValidationControls к TextBox. Во-первых, CompareValidator, чтобы проверить, не вводит ли пользователь недопустимую дату (например, 32 мая), а во-вторых, RangeValidator, чтобы сохранить желаемый диапазон дат.

Добавление 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


Другим продвинутым подходом было бы расширение javascript для CalendarExtender, но тогда у вас есть своя собственная версия инструментария ajax.

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

2 голосов
/ 25 апреля 2012

установить свойство StartDate расширителя календаря в DateTime.Now.Date при загрузке страницы это покажет предыдущие даты как невыбираемые

...