You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 4.8中缓存ListBox后服务器端Label时间戳消失问题

问题解决:Label时间戳回发后消失的处理

问题根源

当前代码仅在Cache["WeekData"]不存在时,才给LabelCurrentTime设置时间戳;当缓存存在(比如点击「Add value to cache」按钮后),Page_Load走if分支,完全未处理Label的文本赋值,导致页面回发后Label内容被清空。同时要实现时间戳仅显示首次加载值、不更新,需要把初始时间持久化存储,回发时复用。

解决方案

修改后端Page_Load方法,利用ViewState保存首次加载的时间戳,确保每次回发都给Label赋值:

protected void Page_Load(object sender, EventArgs e)
{
    // 维护Label的初始时间戳
    if (!IsPostBack)
    {
        // 首次加载时生成时间戳并保存到ViewState
        LabelCurrentTime.Text = DateTime.Now.ToLongTimeString();
        ViewState["InitialTime"] = LabelCurrentTime.Text;
    }
    else
    {
        // 回发时从ViewState读取并赋值,保持时间戳不变
        LabelCurrentTime.Text = ViewState["InitialTime"] as string;
    }

    // 原有ListBox缓存逻辑保持不变
    if (Cache["WeekData"] != null)
    {
        ListBox1.DataSource = Cache["WeekData"];
        ListBox1.DataBind();
    }
    else
    {
        ListBox1.DataSource = null;
        ListBox1.DataBind();
    }
}

说明

  • IsPostBack用于区分首次加载和页面回发:首次加载时生成时间戳并存入ViewState(ViewState是ASP.NET内置的页面状态存储机制,仅当前页面有效);
  • 回发时直接从ViewState取出保存的初始时间戳赋值给Label,既保证时间戳不更新,也避免了回发后Label内容消失的问题;
  • 原有缓存逻辑无需改动,保持ListBox的功能正常。

内容的提问来源于stack exchange,提问作者Rod

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 05:10:38