如何在ASP.NET MVC视图中仅当日显示编辑删除按钮?
问题分析与解决方法
你之前的两处错误:
- 第一次判断时,你拿变量
Today和DateTime.Now.ToShortDateString()做比较——这俩本质是同一个值,所以判断永远为真,按钮一直显示。 - 第二次用
Model.FirstOrDefault().DATE判断,这是取整个列表里第一个元素的日期,不是当前循环行的item的日期,而且你的DATE是可空类型(Nullable<DateTime>),直接和非可空的Today.Date比较会有类型匹配问题,甚至如果列表为空还会触发空引用异常。
正确的实现方式:
遍历每个item时,针对当前item的DATE字段做判断,同时处理可空类型的情况,只比较日期部分(忽略时间):
修改视图中循环内的判断代码:
@foreach (var item in Model) { <tr> <!-- 其他列代码保持不变 --> <td> @Html.DisplayFor(modelItem => item.sys_users1.user_name) </td> @* 修正后的判断逻辑 *@ @if (item.DATE.HasValue && item.DATE.Value.Date == DateTime.Today) { <td> @Html.ActionLink("Edit", "Edit", new { id = item.ID }) | @Html.ActionLink("Details", "Details", new { id = item.ID }) | @Html.ActionLink("Delete", "Delete", new { id = item.ID }) </td> } else { <!-- 日期不符时显示空td,保证表格结构整齐 --> <td></td> } </tr> }
关键说明:
item.DATE.HasValue:先判断DATE字段是否有值,避免可空类型的空引用问题item.DATE.Value.Date:取出DATE的实际值后,只取日期部分(去掉时间),和DateTime.Today(当天日期,无时间)做比较,确保只要日期相同就显示按钮- else分支里保留
<td></td>:避免表格结构错乱,保证每行的列数一致
内容的提问来源于stack exchange,提问作者Ziad Adnan
相关产品推荐
相关产品推荐

