防止服务器端属性更改的回发

时间:2013-06-05 20:36:53

标签: asp.net postback ajaxcontroltoolkit

我有一个简单的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,但它会继续触发回发。

1 个答案:

答案 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。