#asp.net #ajaxcontroltoolkit
#asp.net #ajaxcontroltoolkit
Вопрос:
В принципе, я просто хочу разрешить выбирать даты, превышающие сегодняшний день. Я бы предпочел, чтобы этот способ не показывал предупреждающие сообщения.
Комментарии:
1. Я не думаю, что можно избежать подхода javascript alerp.
2. да, это то, чего я боялся. Спасибо!
Ответ №1:
Я не думаю, что в текущей версии инструментария поддерживается ограничение выбираемых дат. Это простой способ обработки 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. У вас есть два варианта:
- Добавьте
Extender
вValidationControl
. Для этого перетащитеValidationControl
> щелкните смарт-тегValidationControl
> выберитеAdd Extender
. В мастере расширения выберитеValidatorCalloutExtender
. Использование этого подхода позволяет чрезвычайно легко находить и присоединять расширители элементов управления к вашим элементам управления. В VS 2005 вам приходилось выполнять этот процесс вручную, подключая расширители управления. - Вы можете не добавлять расширитель. Мы перейдем к варианту A. Мы добавим две
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 toolkit.
http://codegoeshere.blogspot.com/2007/06/extending-calendarextender.html
Ответ №2:
установите для свойства StartDate расширителя календаря значение DateTime.Now.Дата при загрузке страницы при этом предыдущие даты будут отображаться как невыбираемые