ASP.NET Core 5 MVC 无法为我的 DTO 绑定 DateTime 属性 建模? ASP.NET 核心模型绑定过程是否存在任何已知问题?
ASP.NET Core 5 MVC not able to model bind DateTime property of my DTO ? Is there any known problem with ASP.NET core model binding process?
这是我的场景 -
我正在尝试 post 具有以下结构的 json 对象使用 angular 12 到 MVC 控制器操作方法。
public class Student{
public string FullName {get;set;}
public int Age {get;set;}
public DateTime BirthDate {get;set;}
}
我已经使用 [FromBody]
属性修饰了我的 MVC 操作方法参数。
但是,当我尝试将 post json 对象添加到我的操作中时,模型只是拒绝绑定(模型对象为空)
接下来,我尝试从 DateTime => string 更改 BirthDate,并观察到模型已正确绑定。
模型活页夹是否存在任何已知问题,或者我是否缺少任何需要启用的与日期时间相关的配置?
我的行动
[HttpPost]
public JsonResult Save1([FromBody] Student st)
{
return Json(st);
}
Angular代码
this._http.post<any>("../../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);
});
我这边测试发现,当我设置输入值为“2020-1-12”时,不会绑定DateTime
类型,但是可以绑定string
.
但是,如果我将值设置为“2020-01-12”,那么它可以成功绑定到 DateTime
类型。
由于我没有找到任何官方文件来说明它,所以依我的拙见,你的问题可能来自this.BirthDate
的格式不正确,你可以检查变量的值。我们通常将DateTime格式化为“yyyy-MM-dd”,所以像这种字符串格式可能可以自动转换为DateTime类型,但其他格式则不能。如果你坚持使用你的数据时间格式,你可以在这里使用自定义模型绑定,但我认为这会增加工作量。
问题已由王老师诊断并详细说明。在将数据发送到服务之前,您需要更改 angular 的日期格式。
您可以使用 DatePip 模块 - https://angular.io/api/common/DatePip
下面是更改日期格式的示例代码。
import { DatePipe } from '@angular/common'
...
constructor(public datepipe: DatePipe){}
...
myFunction(){
this.date=new Date();
let latest_date =this.datepipe.transform(this.date, 'yyyy-MM-dd');
}
你可以查看下面的帖子
这是我的场景 -
我正在尝试 post 具有以下结构的 json 对象使用 angular 12 到 MVC 控制器操作方法。
public class Student{
public string FullName {get;set;}
public int Age {get;set;}
public DateTime BirthDate {get;set;}
}
我已经使用 [FromBody]
属性修饰了我的 MVC 操作方法参数。
但是,当我尝试将 post json 对象添加到我的操作中时,模型只是拒绝绑定(模型对象为空)
接下来,我尝试从 DateTime => string 更改 BirthDate,并观察到模型已正确绑定。
模型活页夹是否存在任何已知问题,或者我是否缺少任何需要启用的与日期时间相关的配置?
我的行动
[HttpPost]
public JsonResult Save1([FromBody] Student st)
{
return Json(st);
}
Angular代码
this._http.post<any>("../../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);
});
我这边测试发现,当我设置输入值为“2020-1-12”时,不会绑定DateTime
类型,但是可以绑定string
.
但是,如果我将值设置为“2020-01-12”,那么它可以成功绑定到 DateTime
类型。
由于我没有找到任何官方文件来说明它,所以依我的拙见,你的问题可能来自this.BirthDate
的格式不正确,你可以检查变量的值。我们通常将DateTime格式化为“yyyy-MM-dd”,所以像这种字符串格式可能可以自动转换为DateTime类型,但其他格式则不能。如果你坚持使用你的数据时间格式,你可以在这里使用自定义模型绑定,但我认为这会增加工作量。
问题已由王老师诊断并详细说明。在将数据发送到服务之前,您需要更改 angular 的日期格式。
您可以使用 DatePip 模块 - https://angular.io/api/common/DatePip
下面是更改日期格式的示例代码。
import { DatePipe } from '@angular/common'
...
constructor(public datepipe: DatePipe){}
...
myFunction(){
this.date=new Date();
let latest_date =this.datepipe.transform(this.date, 'yyyy-MM-dd');
}
你可以查看下面的帖子