【发布时间】:2013-03-20 19:10:45
【问题描述】:
我正在开发一个 MVC 4 项目并尝试将 KeyValue 列表中的值转换为可为空的 DateTime。我在映射器中使用了以下行(我没有包括其他属性,因为有很多)
.ForMember(d => d.Deadline, m => m.ResolveUsing<DeadlineResolver>())
我的解析器如下所示:
public class DeadlineResolver : ValueResolver<Booking, DateTime?>
{
protected override DateTime? ResolveCore(Booking source, ResolutionResult resolutionResult)
{
KeyValue keyValue = source.KeyValues.FirstOrDefault(k => k.Key.KeyId == "DEADLINE");
return (keyValue != null) ? DateTime.Parse(keyValue.Value) : (DateTime?)null;
}
}
定义如下所示的deadline的值永远不会返回为null,而是返回DateTime.MinDate。当我在视图中绑定结果时,我需要它为空,这样我只在有日期时才显示一个值。
public DateTime? Deadline { get; set; }
如何在映射后不检查这些值以查找最小日期并将这些值设置为 null(我已实施临时黑客以便代码运行)?
【问题讨论】:
-
什么是
KeyValue?这是你定义的类吗? -
您是否尝试过允许空目标值?
Mapper.Initialize(c => c.AllowNullDestinationValues = true); -
KeyValue 是一个业务层对象,所以我不知道它的全部用途,因为我只在 UI 层上工作,包括编写从业务到 UI 层的映射,但为了清楚起见,我可以发布它的详细信息如果您认为这很重要@Graham?
-
@Mightymuke 感谢您的想法,我们确实在配置文件中设置了 AllowNullDestinationValues = true。
-
您使用的是什么版本的 AutoMapper?