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设置了 to True,并在事件上设置了一个函数TextChanged(尽管TextChanged这里不是问题)。

Page_Load中,我有:

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

打开页面时,Page_Load设置日期,但 AutoPostBack 会在 之后立即触发回发,并在设置为 true 的Page_Load情况下再次调用它。IsPostBack

有没有一种服务器端的方法来防止这种回发?

我尝试将AutoPostBack属性设置为 false,更改SelectedDate并将其设置回 true,但它一直在触发回发。

4

1 回答 1

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。

于 2013-06-05T20:53:00.513 回答