【问题标题】:Prevent postback on server-side property change防止服务器端属性更改的回发
【发布时间】:2013-06-05 20:36:53
【问题描述】:

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

【问题讨论】:

    标签: asp.net postback ajaxcontroltoolkit


    【解决方案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。

    【讨论】:

    • 非常精明,先生。但是,我的 CalendarExtender 不再有日期,当我打开它时,选择了其他日期(CalendarExtender 实际上默认为DateTime.Now。假设我想将其设置为DateTime.Now.AddDays(-1)
    • @MPelletier 对我来说正在工作,读取控件并从文本框中显示日期时间...
    • 是的,你是对的。我做错了其他事情。谢谢!
    • Drats,留下 CalendarExtender.SelectedDate 为空,未设置。
    • 啊! SelectedDate 有点用词不当。你只能使用文本框。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-10
    • 2013-08-07
    • 1970-01-01
    • 2019-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多