在ASP.NET中切换几个月的按钮

时间:2012-07-15 22:26:22

标签: c# asp.net calendar

我正在为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");
}

2 个答案:

答案 0 :(得分: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");
}

答案 1 :(得分:0)

每次,您使用Now()将月份递增或递减1。您需要保存当前导航的月份。例如,保存您在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()方法不会隐式修改您的变量。

e.g。

 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");
    }

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

这里有一个很好的主题:static variables in asp.net/C#