ASP.NET Core 5 MVC无法对我的DTO的DateTime属性进行模型绑定吗?ASP.NET Core模型绑定过程中是否存在已知问题?
ASP.NET Core 5 MVC无法对我的DTO的DateTime属性进行模型绑定吗?ASP.NET Core模型绑定过程中是否存在已知问题?
这是我的情况 -
我正在尝试使用Angular 12将以下结构的json对象发布到MVC控制器动作方法。
public class Student{ public string FullName {get;set;} public int Age {get;set;} public DateTime BirthDate {get;set;} }
我使用了[FromBody]
属性来装饰我的MVC动作方法参数。
然而,当我尝试将json对象发布到我的动作时,模型无法绑定(模型对象为空)。
接下来,我尝试将BirthDate从DateTime更改为string,并观察到模型正确绑定。
模型绑定器有任何已知问题吗?或者我是否缺少需要启用有关日期时间的任何配置?
我的动作:
[HttpPost] public JsonResult Save1([FromBody] Student st) { return Json(st); }
Angular代码:
this._http.post("../../TupleBinderAPI/Save1", { fullName: this.FullName, age: this.Age, birthDate: this.BirthDate }, { headers: { ["Content-Type"]: "application/json; charset=UTF-8" } }).subscribe((data: any) => { console.log(data); });
在ASP.NET Core 5 MVC中,有一个问题是无法对我的DTO的DateTime属性进行模型绑定。是否有关于ASP.NET Core模型绑定过程的已知问题?
我在自己的环境中进行了测试,发现当我将输入值设置为"2020-1-12"时,它无法绑定到DateTime类型,但可以绑定到字符串类型。但是,如果我将值设置为"2020-01-12",那么它可以成功绑定到DateTime类型。
由于我没有找到任何官方文件来说明这个问题,所以在我个人看来,你的问题可能源于this.BirthDate的格式不正确,你可以检查变量的值。我们通常将DateTime格式化为"yyyy-MM-dd",所以像这种字符串格式可能可以自动转换为DateTime类型,但其他一些格式可能无法转换。如果你坚持使用你的日期时间格式,你可以在这里使用自定义模型绑定,但我认为这会导致更多的工作。
感谢解决方案!我认为你正确指出了根本问题。
ASP.NET Core 5 MVC无法对我的DTO的DateTime属性进行模型绑定?ASP.NET Core模型绑定过程中是否存在任何已知问题?
问题的原因是日期格式不匹配,需要在发送数据到服务之前更改Angular的日期格式。
你可以使用DatePipe模块 - https://angular.io/api/common/DatePip
以下是更改日期格式的示例代码:
import { DatePipe } from '/common' ... constructor(public datepipe: DatePipe){} ... myFunction(){ this.date=new Date(); let latest_date =this.datepipe.transform(this.date, 'yyyy-MM-dd'); }
你可以查看下面的讨论线程:How to convert date into this 'yyyy-MM-dd' format in angular 2
谢谢Pankaj bhai。我认为在将日期发布到API之前将日期转换为可接受的格式是有意义的解决方法。