如何处理空日期时间出现在MVC模型
本文关键字:时间 模型 MVC 日期 何处理 处理 | 更新日期: 2023-09-27 18:17:23
我有一个控制器动作,它执行SQL查询并将模型类型的列表传递回视图。然后视图输出一个简单的表,其中包含每个模型中包含的数据。
我的模型:
public class UserModel
{
[Key]
public string UserID { get; set; }
public string EmailAddress { get; set; }
public string Password { get; set; }
public string SecurityToken { get; set; }
[DisplayFormat(DataFormatString = "{0:yyyy/MM/dd}", ApplyFormatInEditMode = true)]
public DateTime CreatedDate { get; set; }
[DisplayFormat(DataFormatString = "{0:yyyy/MM/dd}", ApplyFormatInEditMode = true)]
public DateTime LastUsedDate { get; set; }
[DisplayFormat(DataFormatString = "{0:yyyy/MM/dd}", ApplyFormatInEditMode = true)]
public DateTime LastUpdatedDate { get; set; }
}
我的观点:
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.EmailAddress)
</td>
<td>
@Html.DisplayFor(modelItem => item.SecurityToken)
</td>
<td>
@Html.DisplayFor(modelItem => item.CreatedDate)
</td>
<td>
@Html.DisplayFor(modelItem => item.LastUsedDate)
</td>
<td>
@Html.DisplayFor(modelItem => item.LastUpdatedDate)
</td>
</tr>
}
对于数据中的某些行,LastUsedDate和LastUpdated date为空,因此它们诉诸于1900-01-01,并且它们在视图中显示为空。
是否有办法不显示这个值,如果它是1900-01-01?
我在控制器中的查询是
SELECT UserID, EmailAddress, SecurityToken, CreatedDate,
ISNULL(LastUsedDate, '1900-01-01') AS LastUsedDate,
ISNULL(LastUpdatedDate, '1900-01-01') AS LastUpdatedDate
FROM table1 ORDER BY CreatedDate DESC
我将它们分配给模型,像这样:
var user = new UserModel
{
CreatedDate = (DateTime)reader["CreatedDate"],
LastUsedDate = (DateTime)reader["LastUsedDate"],
LastUpdatedDate = (DateTime)reader["LastUpdatedDate"]
}
将属性类型从DateTime
更改为可空的DateTime(DateTime?
)
public class UserModel
{
// Your existing properties goes here
public DateTime? LastUpdatedDate { get; set; }
}
现在在您的SQL中,不要将NULL
替换为任何日期时间值(例如:1900-01-01)。只返回NULL
。
SELECT UserID, EmailAddress, SecurityToken, CreatedDate,LastUpdatedDate
FROM table1
ORDER BY CreatedDate DESC
从数据读取器读取数据时,执行空检查。如果该值不为空,则将其赋值给LastUpdatedDate属性。
var user = new UserModel
{
EmailAddress = reader.GetString(reader.GetOrdinal("EmailAddress")),
CreatedDate = reader.GetDateTime(reader.GetOrdinal("CreatedDate"))
}
if(!reader.IsDBNull(reader.GetOrdinal("LastUpdatedDate")))
{
user.LastUpdatedDate = reader.GetDateTime(reader.GetOrdinal("LastUpdatedDate"));
}
将您的模型改为使用Nullable<DateTime>
:
[DisplayFormat(DataFormatString = "{0:yyyy/MM/dd}", ApplyFormatInEditMode = true)]
public DateTime? CreatedDate { get; set; }
[DisplayFormat(DataFormatString = "{0:yyyy/MM/dd}", ApplyFormatInEditMode = true)]
public DateTime? LastUsedDate { get; set; }
[DisplayFormat(DataFormatString = "{0:yyyy/MM/dd}", ApplyFormatInEditMode = true)]
public DateTime? LastUpdatedDate { get; set; }