.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
相关产品推荐
相关产品推荐

