CalendarExtender會把textbox的值,當成default選擇日期,
所以它會把民國1010101當成西元1010101,
如果你仔細去看它的月曆,你會發現那根本不對.
知道原因之後就可以解了,
在CalendarExtender顯示前,把textbox換成西元年,並把它塞給CalendarExtender.
在CalendarExtender隱藏前,若textbox是西元年,就把textbox換回成民國年.
目前先用我爛爛的javascript去處理...
HTML
Page Is PostBack:<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> <br /> Default:<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> <br /> Select:<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox> <br /> <asp:ImageButton runat="Server" ID="Image1" ImageUrl="~/images/Calendar_scheduleHS.png" AlternateText="Click to show calendar" /> <br /> <asp:CalendarExtender ID="CalendarExtender1" runat="server" TargetControlID="TextBox2" DaysModeTitleFormat="yyyyMMMM" TodaysDateFormat="yyyyMMdd" Format="yyyyMMdd" FirstDayOfWeek="Sunday" PopupButtonID="Image1" OnClientDateSelectionChanged="toLocalDate" OnClientShowing="toAd" OnClientHiding="toRoc"> </asp:CalendarExtender>
javascript
<script type="text/javascript"> $(function () { $('#tabs').tabs(); if (!isPostBack) { $('#TextBox1').val(getNowDate()); } }); function getNowDate() { var d = new Date(); var yy = d.getFullYear(); var mm = d.getMonth() + 1; if (mm < 10) { mm = '0' + mm; } var dd = d.getDate(); if (dd < 10) { dd = '0' + dd; } return yy + '' + mm + '' + dd; } function toLocalDate(sender, clientside_arguments) { var selectedDate = sender.get_selectedDate(); var DateValue = sender._textbox.get_Value(); var year = parseInt(DateValue.substr(0, 4)) - 1911; sender._textbox.set_Value(year + DateValue.substr(4, 4)); } function toAd(sender, clientside_arguments) { var DateValue = sender._textbox.get_Value(); var len = DateValue.length; if (len == 7) { var yy = parseInt(DateValue.substr(0, 3)) + 1911; var mm = parseInt(DateValue.substr(3, 2)) - 1; var dd = DateValue.substr(5, 2); var fullyy = yy; var newDate = yy + mm + dd; sender._textbox.set_Value(newDate); var utc = new Date(); utc.setUTCFullYear(fullyy, mm, dd); sender.set_selectedDate(utc); } } function toRoc(sender, clientside_arguments) { var DateValue = sender._textbox.get_Value(); var len = DateValue.length; if (len == 8) { var yy = parseInt(DateValue.substr(0, 4)) - 1911; var mm = DateValue.substr(4, 2); var dd = DateValue.substr(6, 2); var fullyy = DateValue.substr(0, 4); var newDate = yy + mm + dd; sender._textbox.set_Value(newDate); } } </script>
cs
protected void Page_Load(object sender, EventArgs e) { Label1.Text = Page.IsPostBack.ToString().ToLower(); bool isPostBack = Page.IsPostBack; ClientScript.RegisterClientScriptBlock(GetType(), "IsPostBack", "var isPostBack = " + isPostBack.ToString().ToLower() + ";", true); if (!isPostBack) { DateTime now = DateTime.Now; TaiwanCalendar tc = new TaiwanCalendar(); string today = tc.GetYear(now).ToString("000") + tc.GetMonth(now).ToString("00") + tc.GetDayOfMonth(now).ToString("00"); this.TextBox2.Text = today; } }
沒有留言:
張貼留言