2012-07-15 59 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"); 
} 
相關問題