You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于文本框设置日历控件的初始打开日期?

实现日历控件首次点击定位到文本框指定日期

完全可以实现这个需求。你当前的代码只设置了日历的SelectedDate,但没同步设置VisibleDate属性——这个属性才是控制日历打开时默认显示的日期位置的,所以首次点击时才会默认跳到当前日期。

只需要在点击图片按钮显示日历的逻辑里,同时设置VisibleDate和SelectedDate即可,另外建议加上日期格式的校验,避免文本框内容非法导致报错。

修改后的代码如下:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        LoadGV();
    }
}

protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
{
    if (Calendar1.Visible)
    {
        txtTime.Text = Calendar1.SelectedDate.ToString("yyyy/MM/dd");
        Calendar1.Visible = false;
    }
    else
    {
        Calendar1.Visible = true;
        Calendar1.Attributes.Add("style", "BACKGROUND: white; POSITION: absolute");
        // 先校验文本框日期格式是否合法
        if (DateTime.TryParse(txtTime.Text, out DateTime targetDate))
        {
            Calendar1.SelectedDate = targetDate;
            // 设置VisibleDate,让日历打开时定位到目标日期所在月份
            Calendar1.VisibleDate = targetDate;
        }
        // 如果日期不合法,可添加默认处理,比如定位到当前日期
        else
        {
            Calendar1.SelectedDate = DateTime.Now;
            Calendar1.VisibleDate = DateTime.Now;
        }
    }
}

protected void Calendar1_SelectionChanged(object sender, EventArgs e)
{
    Session["TIME"] = Calendar1.SelectedDate.ToString("yyyy/MM/dd");
    txtTime.Text = Calendar1.SelectedDate.ToString("yyyy/MM/dd");
    Calendar1.Visible = false;
}

protected void Calendar1_DayRender(object sender, DayRenderEventArgs e)
{
    if (e.Day.IsOtherMonth)
    {
        e.Day.IsSelectable = false;
    }
}

这样修改后,当页面加载完成文本框已有指定日期(比如2011/05/15),用户首次点击日历按钮时,日历就会自动定位到该日期所在的月份,并且选中该日期。

内容的提问来源于stack exchange,提问作者ServalChan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 05:10:31