ASP.NET Core 5 MVC无法对我的DTO的DateTime属性进行模型绑定吗?ASP.NET Core模型绑定过程中是否存在已知问题?

13 浏览
0 Comments

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);
});

0
0 Comments

在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类型,但其他一些格式可能无法转换。如果你坚持使用你的日期时间格式,你可以在这里使用自定义模型绑定,但我认为这会导致更多的工作。

感谢解决方案!我认为你正确指出了根本问题。

0
0 Comments

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之前将日期转换为可接受的格式是有意义的解决方法。

0