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