【问题标题】:Bootstrap Datepicker: Cannot implicitly convert type 'System.DateTime?' to 'System.DateTime'. An explicit conversion exists (are you missing a cast?)Bootstrap Datepicker:无法隐式转换类型“System.DateTime?”到“系统。日期时间”。存在显式转换(您是否缺少演员表?)
【发布时间】:2018-03-21 22:46:53
【问题描述】:

我是这里的新手。我在这里遇到了类似的问题,但没有一个有帮助。我的ViewModel 中有以下内容:

public DateTime FromDate { get; set; }

public DateTime ToDate { get; set; }

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

public DateTime? FromDate { get; set; }

public DateTime? ToDate { get; set; }

更改后,FromDateToDate 都出现以下错误:

不能隐式转换类型“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");
}

【问题讨论】:

  • 哪里出错了?您如何将视图模型映射到数据模型? (作为旁注,01/01/0001 的值不是null
  • @StephenMuecke,这应该会有所帮助。见编辑
  • 您显示的代码不会产生该错误。它发生在哪里? (并删除输入中毫无意义的nameid 属性——它们已经为你创建了——无论如何,在使用TagHelper 时你永远不应该设置name 属性)
  • @StephenMuecke,既然我们已经找到了正确的解决方案,您能否发布它以便我将其标记为正确?这将有助于其他可能在未来遇到相同/类似问题的人。

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


【解决方案1】:

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

您不能将DateTime? 显式转换为DateTime,因为该值可能是null

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

history.FromDate = locationsViewModel.FromDate.Value;

如果不是,那么属性可能是null,这种情况下需要使用

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-10
    • 1970-01-01
    • 2013-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多