Bootstrap Datepicker:无法隐式转换类型'System.DateTime?'到'System.DateTime'。存在显式转换(您是否错过了演员?)

时间:2018-03-21 22:46:53

标签: asp.net-mvc twitter-bootstrap asp.net-core-mvc bootstrap-datepicker

我是新手。我在这里遇到过类似的问题,但没有一个有帮助。我的ViewModel

中有以下内容
public DateTime FromDate { get; set; }

public DateTime ToDate { get; set; }

当我运行代码时,View之后的GET Method,我的默认日期为:01/01/0001,换句话说,null /默认值。我在网上搜索,发现我需要制作这些字段nullable。因此,我将上面的代码更改为:

public DateTime? FromDate { get; set; }

public DateTime? ToDate { get; set; }

更改后,FromDateToDate收到以下错误:

  

无法隐式转换类型'System.DateTime?'到'System.DateTime'。存在显式转换(您是否错过了演员?)

怎么办?

修改

[HttpPost]
public IActionResult Locate(...)
{
    InventoryHistory history = new InventoryHistory();
    ...
    ...
    history.FromDate = locationsViewModel.FromDate;
    history.ToDate = locationsViewModel.ToDate;
    ...
    ...
    _context.Add(history);
    _context.SaveChanges();

    return RedirectToAction("Details");
}

1 个答案:

答案 0 :(得分:1)

问题是您的数据模型具有FromDateToDate的非可空属性,但视图模型具有等效的可空属性。

您无法明确地将DateTime?转换为DateTime,因为该值可能为null

如果您的视图模型属性使用[Required]属性进行修饰,并且您在映射之前检查了ModelState.Isvalid(即您知道该属性具有值),那么您可以使用

history.FromDate = locationsViewModel.FromDate.Value;

如果没有,那么该属性可以是null,在这种情况下您需要使用

history.FromDate = locationsViewModel.FromDate.GetValueOrDefault();

将数据模型值设置为1/1/0001DateTime的默认值)