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

ASP.NET C# Razor视图工单到期倒计时刷新后数值不变问题咨询

问题原因
  • 倒计时计算逻辑颠倒:当前使用DateTime.Today - 工单截止日期的顺序计算时间差,未到截止日期时得到的是负的TimeSpan,后续通过格式化字符串取天数时默认丢失了负号,取到绝对值的天数值,所以新增工单时(截止次日)刚好得到1,显示正常;但进入次日之后,负差值的符号依旧丢失,不会触发到期、过期的判断分支,就会一直显示旧的剩余天数。
  • 时间差值取值方式错误:将TimeSpan强制转成"dd"格式字符串再转十进制数的写法完全多余,非常容易出转换错误;而且TimeSpan的"dd"格式仅取整数天部分,不会保留差值的正负属性,进一步加剧了计算错误。
  • 代码存在语法错误:一是剩余天数大于1的分支中,span结束标签漏写<,错误写为days/span>;二是TimeToEnd ==1的分支结束后漏写闭合大括号},会导致后续else分支的判断逻辑完全错乱。
  • 页面缓存导致渲染结果未更新:如果修复代码逻辑后问题仍然存在,大概率是页面开启了服务器端输出缓存,或者客户端浏览器缓存了旧的页面内容,刷新时没有请求最新的渲染结果。
修复方案

首先替换为修正后的Razor代码:

// 正确计算剩余天数:用截止日期减去当前日期,直接取总天数向下取整
var remainingDays = (int)Math.Floor((work.DateOfWorkCompletion.Value - DateTime.Today).TotalDays);
<h2>
    @Html.ActionLink(work.Name, "Details", new { work.WorkId }, new { style = "text-decoration: none; color:black;" })
    <span class="timeAlert">
        -
        @if (remainingDays > 1)
        {
            <span>end of offer in @remainingDays days</span>
        }
        else if (remainingDays == 1)
        {
            <span class="text-danger">end of offer in @remainingDays day</span>
        }
        else if (remainingDays == 0)
        { 
            <span class="text-danger">the offer ends today</span>
        }
        else
        { 
            <span class="text-danger">offer has expired</span>
        }
    </span>
</h2>

修复说明:

  • 修正计算逻辑:调整为「截止日期减当前日期」的计算顺序,直接读取TimeSpan的TotalDays属性获取完整的天数差值,不需要转字符串再转类型,既简化代码又避免了符号丢失、格式转换错误的问题。
  • 修复所有语法错误:补全span的闭合标签、补全if分支的闭合大括号,同时调整判断顺序,符合常规的倒计时展示逻辑。
  • 缓存问题处理:如果修复代码后刷新页面仍未生效,先按Ctrl+F5强制跳过浏览器缓存加载最新页面;如果还是无效,检查服务端该页面的输出缓存配置,关闭该页面的缓存或者添加每天自动更新的缓存失效规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 18:45:02