在 ASP.NET 中切换月份的按钮

Posted

技术标签:

【中文标题】在 ASP.NET 中切换月份的按钮【英文标题】:Buttons to switch between months in ASP.NET 【发布时间】:2012-07-15 22:26:22 【问题描述】:

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

【问题讨论】:

【参考方案1】:

每次,您都使用 Now() 将月份递增或递减一。您需要保存当前导航到的月份。例如,将您导航到的最后一个日期保存在 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");
    

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

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

【讨论】:

感谢您的快速回答!完美运行。【参考方案2】:

它发生的原因是因为您使用的是静态 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");

【讨论】:

以上是关于在 ASP.NET 中切换月份的按钮的主要内容,如果未能解决你的问题,请参考以下文章

(asp.net) Bootstrap 4 导航栏切换器不工作

为 ASP.NET 编写月份和年份下拉列表的最佳方法是啥?

我的ASP.NET 程序点击按钮为啥没有反应?

asp.net 点击一下文件名或者一个下载按钮,将文件下载下来怎么做啊???

通过asp.net中的数据表在asp gridview中添加按钮列

如何绕过 ASP.NET 中按钮的验证?