Можно ли добавить опцию «Нет» в расширитель календаря ajax toolkit?

На моей странице есть объект <ajaxToolkit:CalendarExtender>. Выбранная дата помещается в неактивный TextBox (в начале заполняется сегодняшней датой). Я бы хотел, чтобы в этом календаре была опция «Нет», для которой система будет выполнять операцию по умолчанию (например, у нее есть опция «Сегодня»). Это возможно? Я искал информацию об этом в Интернете, но не нашел ничего подходящего. Интересно, не упустил ли я что-нибудь. Или мне нужно реализовать отдельную логику (например, включить TextBox, и пользователь может оставить его пустым как вариант «Нет»)?

Существуют ли какие-либо объекты календаря, отличные от расширителя календаря набора инструментов ajax, которые можно использовать с asp.net, которые предлагают параметр «Нет»?

Я все еще открыт для ответа, даже если это просто «Нет» (по крайней мере, немного задокументировано).


person Coral Doe    schedule 21.08.2012    source источник
comment
Нет, но почему бы просто не позволить пользователю ничего не выбирать? Вам не нужно устанавливать текст TextBox на сегодня.   -  person Tim Schmelter    schedule 21.08.2012
comment
Что, если пользователь выберет дату, но затем передумает перед отправкой? Дата уже выбрана в календаре и он вынужден как-то перезагружать страницу.   -  person Coral Doe    schedule 21.08.2012
comment
Так почему вы вообще хотите отключить TextBox? Не ограничивайте пользователя. Если он хочет выбрать дату, он может выбрать ее с помощью расширителя или ввести вручную. Если он не хочет выбирать один, он может оставить его пустым или удалить, если он уже был выбран. Другой вариант: вы можете предоставить кнопку очистки, если хотите.   -  person Tim Schmelter    schedule 21.08.2012
comment
В конце концов, это может быть то, чем он остается. В настоящий момент я все еще использую всплывающую подсказку, чтобы сказать пользователю, что он может оставить поле TextBox пустым, чтобы оставить его как вариант «Нет». Но я все еще изучаю другие способы сделать это.   -  person Coral Doe    schedule 28.08.2012


Ответы (1)


Доступны два варианта: первый - добавить некоторый элемент html рядом с текстовым полем и обработать его событие щелчка в javascript. В этом обработчике событий очистите расширитель календаря. Это код:

 <script type="text/javascript">
      function clearDate(extenderId) {
           $find(extenderId).set_selectedDate(null);
      }
 </script>

<asp:TextBox runat="server" ID="Date1" autocomplete="off" />
<input type="button" value="x" onclick="clearDate('<%= defaultCalendarExtender.ClientID %>')" /> 
<br />
<ajaxToolkit:CalendarExtender ID="defaultCalendarExtender" runat="server" 
    TargetControlID="Date1" />

И второе решение - настроить исходники проекта AjaxControlToolkit. Собственно поменять нужно только Client/MicrosoftAjax.Extended/Calendar/CalendarBehavior.pre.js файл. Замените его приведенным ниже кодом. На самом деле кода много, потому что я слишком ленив, чтобы объяснять каждое изменение шаг за шагом;) Вкратце, я добавил новый элемент в нижний колонтитул всплывающего окна календаря, чтобы сбросить выбранную дату до выбранного значения по умолчанию, если оно было указано, или до нуля . Вы также можете настроить файл Calendar.css рядом с CalendarBehavior.pre.js.

Из-за ограничений на огромные ответы у меня был опубликован код javascript на pastebin Pastebin link

person Yuriy Rozhovetskiy    schedule 27.09.2012
comment
Это отличное решение. Спасибо. На самом деле я пробовал второе решение, потому что оно более элегантное и интегрированное (на мой взгляд). - person Coral Doe; 18.10.2012