ASP.NET MVC视图中时间差≥12小时判断逻辑失效求助
问题解决方法
你的代码核心问题有两个:
- 时间差计算的类型错误:
cont.TimeStamp - DateTime.Now得到的是TimeSpan对象,不能直接和整数12比较,需要用TotalHours属性获取小时数 - 时间差的方向逻辑错误:如果
cont.TimeStamp是记录创建/更新的时间戳(通常是过去的时间),那cont.TimeStamp - DateTime.Now会是负数,应该反过来计算当前时间与时间戳的差值
另外,在Razor视图的C#代码块(@if()内部)里,直接写>=即可,不需要转义成>=,转义是HTML里的写法,C#代码块不需要。
修正后的代码如下:
@foreach (var cont in contents) { if (cont.IsArchive == null) { <tr> <td> @Html.DisplayFor(modelItem => cont.ToolList_Text) </td> <td> @Html.DisplayFor(modelItem => cont.GenericDropDownList_Text) </td> <td> @Html.DisplayFor(modelItem => cont.Comment_Text) </td> @if ((DateTime.Now - cont.TimeStamp).TotalHours >= 12) { <td> @Html.DisplayFor(modelItem => cont.TimeStamp) </td> } // 可选:避免表格结构错乱,条件不满足时渲染空单元格 else { <td></td> } <td class="text-center"> <div style="display: inline-flex;"> <button type="submit" value="Edit" class="btn btn-info" id="edit" name="edit">Edit</button> <button type="submit" value="Archive" class="btn btn-danger" id="archive" name="archive">Archive</button> </div> </td> </tr> } }
关键说明:
- 时间差计算:
(DateTime.Now - cont.TimeStamp).TotalHours会返回两个时间之间的小时数(带小数),比如12.5表示12小时30分钟 - 逻辑正确性:如果需求是“时间戳距离现在已经超过12小时”,用上面的写法;如果是“时间戳在12小时之后(未来时间)”,则改成
(cont.TimeStamp - DateTime.Now).TotalHours >=12 - 表格结构完整性:建议加上
else分支渲染空的<td>,否则当条件不满足时,表格列数会少一列,导致布局错乱 - 符号写法:Razor的C#代码块中直接使用
>=,不需要转义,转义字符>=仅用于HTML内容中显示符号时
内容的提问来源于stack exchange,提问作者Donnie
相关产品推荐
相关产品推荐

