我是新手。我在这里遇到过类似的问题,但没有一个有帮助。我的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; }
更改后,FromDate
和ToDate
收到以下错误:
无法隐式转换类型'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");
}
答案 0 :(得分:1)
问题是您的数据模型具有FromDate
和ToDate
的非可空属性,但视图模型具有等效的可空属性。
您无法明确地将DateTime?
转换为DateTime
,因为该值可能为null
。
如果您的视图模型属性使用[Required]
属性进行修饰,并且您在映射之前检查了ModelState.Isvalid
(即您知道该属性具有值),那么您可以使用
history.FromDate = locationsViewModel.FromDate.Value;
如果没有,那么该属性可以是null
,在这种情况下您需要使用
history.FromDate = locationsViewModel.FromDate.GetValueOrDefault();
将数据模型值设置为1/1/0001
(DateTime
的默认值)