2013-06-05 71 views
1

我有一個簡單的CalendarExtender(來自AjaxControlToolkit)附加到文本框。防止服務器端屬性更改回發

<asp:TextBox ID="StartDateText" runat="server" MaxLength="10" Width="70px" AutoPostBack="True" OnTextChanged="StartDateText_TextChanged" /> 
<asp:ImageButton ID="ImageCalendarStartDate" runat="server" ImageUrl="~/images/Calendar_scheduleHS.png" AlternateText="Click to show calendar" /> 
<asp:CalendarExtender ID="StartDateCalendarExtender" runat="server" TargetControlID="StartDateText" PopupButtonID="ImageCalendarStartDate" /> 

爲了控制用戶的輸入,我有AutoPostBack設置爲True的文本框,以及在TextChanged事件的函數(雖然TextChanged是不是這裏的問題)。

Page_Load,我有:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     StartDateCalendarExtender.SelectedDate = DateTime.Now.AddDays(-1); 
    } 
} 

在打開的頁面,Page_Load設定日期,但將AutoPostBack Page_Load後立即觸發回傳,用IsPostBack設置爲true再次調用它。

有沒有防止此回發的服務器端方法?

我嘗試將AutoPostBack屬性設置爲false,更改SelectedDate並將其設置爲true,但它會持續觸發回發。

回答

1

原因是因爲您在擴展程序上給出了日期,所以擴展程序將其添加到文本框中,然後文本框觸發回發。

如何嘗試設置文本框中的文本在第一個地方。

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     // remove that 
     // StartDateCalendarExtender.SelectedDate = DateTime.Now; 
     // and direct set it to the text box. 
     StartDateText.Text = DateTime.Now; 
    } 
} 

也許你需要按照你想要的方式格式化DateTime。

+0

非常聰明,先生。然而,我的CalendarExtender然後不再有日期,當我打開它時,選擇了其他日期(CalendarExtender實際上默認爲'DateTime.Now'。假設我想將它設置爲'DateTime.Now.AddDays(-1) '。 – MPelletier

+0

@MPelletier對我來說,控件是從文本框中讀取並顯示日期時間的...... – Aristos

+0

是的,你是對的,我做了其他一些不正確的事,謝謝! – MPelletier