ASP.NET Core 6 MVC 中的 DateOnly 绑定问题
Problem binding DateOnly in ASP.NET Core 6 MVC
我试图在 .NET 6 中使用新的 DateOnly
类型,但我在模型绑定方面遇到了问题。一个完全正常的表单数据,例如:
被解析为“0001.01.01”并被活页夹接受为有效。
用旧的 DateTime
替换所有 DataOnly
立即解决了这个问题。
这可能是 BCL 中的错误,还是我在这里遗漏了一些意图?除了实现自定义模型活页夹之外,是否有任何解决方法?
对 DateOnly 和 TimeOnly 的完全绑定支持 isn't available yet. Another related issue is this one。这是为 .NET 7 计划的
第二个问题的解决方法是创建自定义 JsonConverter 和 TypeConverter。第二期的作者已经将两者打包在 DateOnlyTimeOnly.AspNet 包
如之前的回答所述,DateOnly 尚不提供完整的绑定支持。但是,我遇到了类似的问题,并且能够使用 DataType 注释解决这个问题。
我正在使用只需要日期的 API 并且不想经历从 DateTime 获取日期的麻烦(虽然这不是很麻烦,但仍然......) .
这是我模型上的 属性,我用来根据从 API 返回的数据构建对象:
[DataType(DataType.Date)]
public DateTime DateBecameLead { get; init; }
这是我 Index.cshtml.cs 上的 属性,我用来按日期过滤机会卡列表。:
[ BindProperty(SupportsGet = true), DataType(DataType.Date) ]
public DateTime DateBecameLead { get; init; } = new (2021, 1, 1);
然后,再往下Index.cshtml.cs,我可以很容易地比较这两个属性:
OpportunityCards = OpportunityCards.Where(opp => opp.DateBecameLead >= DateBecameLead).ToList();
关于进一步的上下文,这里是 Index.cshtml 上的输入标签,它绑定到来自 Index.cshtml.cs 的 属性:
<input id="date-became-lead"
type="date"
asp-for="DateBecameLead" />
它仍在使用旧的 DateTime 对象,但是,它确实提供了与使用 DateOnly 对象相同的好处,并且按预期工作。一旦为 DateOnly 提供了完整的绑定支持,代码将不会有太大变化,除非我可以在没有注释的情况下生活。
我试图在 .NET 6 中使用新的 DateOnly
类型,但我在模型绑定方面遇到了问题。一个完全正常的表单数据,例如:
被解析为“0001.01.01”并被活页夹接受为有效。
用旧的 DateTime
替换所有 DataOnly
立即解决了这个问题。
这可能是 BCL 中的错误,还是我在这里遗漏了一些意图?除了实现自定义模型活页夹之外,是否有任何解决方法?
对 DateOnly 和 TimeOnly 的完全绑定支持 isn't available yet. Another related issue is this one。这是为 .NET 7 计划的
第二个问题的解决方法是创建自定义 JsonConverter 和 TypeConverter。第二期的作者已经将两者打包在 DateOnlyTimeOnly.AspNet 包
如之前的回答所述,DateOnly 尚不提供完整的绑定支持。但是,我遇到了类似的问题,并且能够使用 DataType 注释解决这个问题。
我正在使用只需要日期的 API 并且不想经历从 DateTime 获取日期的麻烦(虽然这不是很麻烦,但仍然......) .
这是我模型上的 属性,我用来根据从 API 返回的数据构建对象:
[DataType(DataType.Date)]
public DateTime DateBecameLead { get; init; }
这是我 Index.cshtml.cs 上的 属性,我用来按日期过滤机会卡列表。:
[ BindProperty(SupportsGet = true), DataType(DataType.Date) ]
public DateTime DateBecameLead { get; init; } = new (2021, 1, 1);
然后,再往下Index.cshtml.cs,我可以很容易地比较这两个属性:
OpportunityCards = OpportunityCards.Where(opp => opp.DateBecameLead >= DateBecameLead).ToList();
关于进一步的上下文,这里是 Index.cshtml 上的输入标签,它绑定到来自 Index.cshtml.cs 的 属性:
<input id="date-became-lead"
type="date"
asp-for="DateBecameLead" />
它仍在使用旧的 DateTime 对象,但是,它确实提供了与使用 DateOnly 对象相同的好处,并且按预期工作。一旦为 DateOnly 提供了完整的绑定支持,代码将不会有太大变化,除非我可以在没有注释的情况下生活。