C# 如何处理MVC模型中出现的空datetime

C# 如何处理MVC模型中出现的空datetime,c#,asp.net-mvc,C#,Asp.net Mvc,我有一个控制器操作,它执行SQL查询并将模型类型的列表传递回视图。然后,视图输出一个简单的表,其中包含每个模型中包含的数据 我的模型: public class UserModel { [Key] public string UserID { get; set; } public string EmailAddress { get; set; } public string Password { get; set; } public string Secu

我有一个控制器操作,它执行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>
}
我将它们分配给模型,如下所示:

var user = new UserModel
{
    CreatedDate = (DateTime)reader["CreatedDate"],
    LastUsedDate = (DateTime)reader["LastUsedDate"],
    LastUpdatedDate = (DateTime)reader["LastUpdatedDate"]
}

将属性类型从
DateTime
更改为可为空的DateTime(
DateTime?

现在,在SQL中,不要用任何日期时间值(例如:1900-01-01)替换
NULL
。只需返回
NULL

SELECT UserID, EmailAddress, SecurityToken, CreatedDate,LastUpdatedDate
FROM table1 
ORDER BY CreatedDate DESC
从数据读取器读取数据时,执行空检查。如果该值不为null,则将其分配给LastUpdateDate属性

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"));
}

将属性类型从
DateTime
更改为可为空的DateTime(
DateTime?

现在,在SQL中,不要用任何日期时间值(例如:1900-01-01)替换
NULL
。只需返回
NULL

SELECT UserID, EmailAddress, SecurityToken, CreatedDate,LastUpdatedDate
FROM table1 
ORDER BY CreatedDate DESC
从数据读取器读取数据时,执行空检查。如果该值不为null,则将其分配给LastUpdateDate属性

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"));
}

将您的型号更改为使用可为空的


将您的型号更改为使用可为空的

[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; }