1

我正在为 ASP.NET 开发日历。我没有使用 Calendar 控件,因为它非常有限。

我想知道如何以编程方式在不同月份之间切换,例如,显示上个月和下个月?

现在我只能更改一个月,然后月份就卡住了:如果先显示 7 月,那么我只能到 6 月。当我在六月并按下下个月按钮时,它会显示八月。AJAX 会是解决这个问题的好选择吗?

我的代码:

private static DateTime now = DateTime.Today;

protected void Page_Load(object sender, EventArgs e)
{

}

protected void btnPrev_Click(object sender, EventArgs e)
{
    lblDateCal.Text = now.AddMonths(-1).ToString("MMMM");
}

protected void btnNext_Click(object sender, EventArgs e)
{
    lblDateCal.Text = now.AddMonths(+1).ToString("MMMM");
}
4

2 回答 2

0

每次,您都使用 Now() 将月份递增或递减一。您需要保存当前导航到的月份。例如,将您导航到的最后一个日期保存在 ViewState 中,并在您的点击事件中使用它而不是 Now()。

例如:

protected DateTime UpdateDate(int offset)
{
    DateTime dt;
    if (ViewState["LastDate"] == null)
       dt = DateTime.Now.AddMonths(offset);
    else
       dt = ((DateTime)ViewState["LastDate"]).AddMonths(offset);
    ViewState["LastDate"] = dt;
    return dt;
}

protected void btnPrev_Click(object sender, EventArgs e)
{
    lblDateCal.Text = UpdateDate(-1).ToString("MMMM");
}

protected void btnNext_Click(object sender, EventArgs e)
{
    lblDateCal.Text = UpdateDate(1).ToString("MMMM");
}

否则,如果您更喜欢使用静态变量,那么您需要通过每次点击来正确使用静态变量。也就是说,AddMonths() 方法不会隐式修改你的变量。

例如

 protected void btnPrev_Click(object sender, EventArgs e)
    {
        now = now.AddMonths(-1);
        lblDateCal.Text = now.ToString("MMMM");
    }

    protected void btnNext_Click(object sender, EventArgs e)
    {
        now = now.AddMonths(+1);
        lblDateCal.Text = now.ToString("MMMM");
    }

但是,由于静态变量对应用程序来说是全局的,我认为这不是最好的方法。

这是一个很好的主题:asp.net/C#中的静态变量

于 2012-07-15T22:43:20.330 回答
0

它发生的原因是因为您使用的是静态 DateTime 变量

请尝试这种方式

protected void Page_Load(object sender, EventArgs e)
{

}

protected void btnPrev_Click(object sender, EventArgs e)
{
    lblDateCal.Text = DateTime.Today.AddMonths(-1).ToString("MMMM");
}

protected void btnNext_Click(object sender, EventArgs e)
{
    lblDateCal.Text = DateTime.Today.AddMonths(+1).ToString("MMMM");
}
于 2012-07-15T22:33:14.587 回答