1

ASP.NET用のカレンダーを開発しています。カレンダーコントロールは非常に限られているため、使用していません。

たとえば、前月と翌月を表示するなど、プログラムで異なる月を切り替えるにはどうすればよいでしょうか。

今、私は月を一度だけ変更するようになり、それからその月は行き詰まります。7月が最初に表示された場合、私は6月にしか到達できません。6月に来月のボタンを押すと、8月が表示されます。この問題を解決するには、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

静的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 に答える
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()メソッドは変数を暗黙的に変更しません。

例えば

 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 に答える