2012-07-15 22 views
0

我开发ASP.NET日历切换。我没有使用日历控件,因为它非常有限。按钮到几个月之间在ASP.NET

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

现在我只能改变一个月,然后这个月会卡住:如果先显示七月,那么我只能到六月。当我在六月推下一个月的按钮时,它会显示我八月。 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"); 
} 

回答

0

每一次,你使用现在()以一个月递增或递减月份。您需要保存您正在导航的当前月份。例如,将导航到的最后日期保存到ViewState中,并将其用于Click事件而不是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"); 
    } 

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

这里是一个很好的线程在这里:static variables in asp.net/C#

+0

感谢您的快速回答!完美的作品。 – Deeds 2012-07-15 22:54:19

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"); 
} 
相关问题