У меня простая цель. Я могу смоделировать проблему, создав чистый проект.
Проблема в том, что я не могу правильно установить дату отображения asp.net calendarExtender (при открытии) при динамической установке даты в текстовом поле.
Вот код:
HTML:
<asp:Button
ID="Button1"
runat="server"
Text="2013"
OnClientClick="SetDate(0);return false;" />
<asp:Button
ID="Button2"
runat="server"
Text="2015"
OnClientClick="SetDate(1);return false;" />
<br />
<asp:TextBox
runat="server"
ID="tbDate"></asp:TextBox>
<asp:CalendarExtender
ID="clDate"
runat="server"
Enabled="True"
BehaviorID="calendarExtender"
TargetControlID="tbDate">
</asp:CalendarExtender>
JavaScript:
var Data = (function () {
var _items = [{ ID: 1, Date: "19/12/2013" },
{ ID: 2, Date: "19/12/2015" }];
function _GetAll() {
return _items;
}
function _GetByID(itemID) {
var o = $.grep(_items, function (el, i) {
return el.ID === itemID;
});
return o[0];
}
return {
GetByID: _GetByID,
GetAll: _GetAll
}
})();
function SetDate(itemID) {
var item = Data.GetByID(itemID);
var stringDate = item.Date;
var objectDate = Date.parseLocale(item.Date, "dd/MM/yyyy");
$("#tbDate").val(stringDate);
$find("calendarExtender").set_selectedDate(objectDate);
}
Это должно быть настолько просто, насколько возможно, но контрольные швы должны иметь свое собственное поведение. Из того, что я делаю вывод, дата отображения (при открытии) всегда предполагает последнюю выбранную дату. Не важно, что вы делаете.
Некоторые сценарии:
СЦЕНАРИЙ 1
1-загрузочная страница
Дважды щелкните текстовое поле, чтобы открыть расширитель календаря.
3-календарный расширитель предполагает текущую дату.
4-щелкните кнопку 2013, текстовое поле будет обновлено до даты 2013 года.
5-щелчок по текстовому полю, открытие календаря расширитель ..... все еще есть 2014 (текущая дата)
СЦЕНАРИЙ 2
1-загрузка страницы 2-кратным нажатием на кнопку 2013 года текстовое поле обновлено до даты 2013 года.
3-щелкните текстовое поле, чтобы открыть календарь.
4-календарный расширитель предполагает 2013 год (правильная дата).
5-щелкните кнопку 2015 года, текстовое поле обновится до даты 2015 года.
3-щелкните текстовое поле, чтобы открыть расширитель календаря ..... все еще есть 2013 год (первая дата)
СЦЕНАРИЙ 3
(то же, что и 2, но начиная с нажатия кнопки 2015)
СЦЕНАРИЙ 4
1-загрузочная страница
Дважды щелкните кнопку 2013 г., текстовое поле будет обновлено до даты 2013 г. (НЕ НАЖИМАЙТЕ НА ТЕКСТОВОЕ ОКНО).
3-щелкните кнопку 2015 года, текстовое поле обновится до даты 2015 года.
4-щелкните текстовое поле, чтобы открыть расширитель календаря ... Предполагается, что 2015 год (последняя дата)
ПРИМЕЧАНИЕ: если я отображаю текущую установленную дату динамически с
alert($find("calendarExtender").get_selectedDate());
, это правильно. Но дисплей просто не обновляется.
Это правильное поведение? Я что-то упускаю?
Как я могу заставить его предполагать правильную дату?