我有一个简单的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
isn& #39;这里的问题)。
在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,但它会继续触发回发。
答案 0 :(得分:1)
原因是因为你在扩展器上给出日期,然后扩展器将它添加到文本框中,然后文本框触发回发。
如何尝试在TextBox首先设置文本。
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。