如果int从json传递为null,如何修复MVC模型null问题
我正在使用asp.net核心mvc web应用程序中的json生成表单。我的模型定义如下如果int从json传递为null,如何修复MVC模型null问题,json,asp.net-mvc,asp.net-core,Json,Asp.net Mvc,Asp.net Core,我正在使用asp.net核心mvc web应用程序中的json生成表单。我的模型定义如下 public class MyRootModel { public Data data { get; set; } public class Data { public Client client { get; set; } public Contact contact { get; set; }
public class MyRootModel
{
public Data data { get; set; }
public class Data
{
public Client client { get; set; }
public Contact contact { get; set; }
}
}
public class Client
{
public string Forename { get; set; }
public string Surname { get; set; }
public int? Gender { get; set; }
public DateTime DateofBirth { get; set; }
}
public class Contact
{
public string City { get; set; }
public string Street { get; set; }
public string Street2 { get; set; }
}
[HttpPost]
public MyResponse Next([FromBody] MyRootModel formCollection)
{
MyResponse myResponse = new MyResponse ();
myResponse.ReturnType = "Success";
myResponse.ReturnMessage = "Well done";
return myResponse ;
}
我的控制器上的post方法如下所示
public class MyRootModel
{
public Data data { get; set; }
public class Data
{
public Client client { get; set; }
public Contact contact { get; set; }
}
}
public class Client
{
public string Forename { get; set; }
public string Surname { get; set; }
public int? Gender { get; set; }
public DateTime DateofBirth { get; set; }
}
public class Contact
{
public string City { get; set; }
public string Street { get; set; }
public string Street2 { get; set; }
}
[HttpPost]
public MyResponse Next([FromBody] MyRootModel formCollection)
{
MyResponse myResponse = new MyResponse ();
myResponse.ReturnType = "Success";
myResponse.ReturnMessage = "Well done";
return myResponse ;
}
表单上的性别是html5选择类型。提交表单时,当从客户端传递json时,控制器上的formCollection对象将自动初始化。但是,如果用户在性别下拉列表中未选择任何值,则formCollection将显示为null。我查看了正在传递的json,并注意到传递了“gender”:“null”
,这就是formCollection显示为null的原因。即使我把性别定义为int?在我的客户模型中
我正在显示两种情况下从下表提交的json。当用户选择性别时,第一个场景可以正常工作
表单集合已正确初始化
{
"data": {
"client": {
"forename": "abc",
"surname": "def",
"gender": 2
},
"contact": {
"city": "ghi",
"street": "jkl"
},
"submit": true
},
"metadata": {}
}
传递以下json时,FormCollection将变为null
{
"data": {
"client": {
"forename": "dsfaasdf",
"surname": "asdf",
"gender": "null"
},
"contact": {
"city": "asdf",
"street": ""
},
"submit": true
},
"metadata": {}
}
我认为int?
允许null,所以我将性别类型从int
更改为int?
,但仍然不起作用
{
"data": {
"client": {
"forename": "dsfaasdf",
"surname": "asdf",
"gender": null
},
"contact": {
"city": "asdf",
"street": ""
},
"submit": true
},
"metadata": {}
}
尝试将性别传递为null而不是“null”。这是因为代码中模型类客户端中的性别属性为int,但您正在尝试传递字符串。我不知道是否可以更改json,因为它是由formio在提交时生成的。您的方向是正确的,我发现我可以根据formio文档使用钩子在提交之前更改值。我正在使用以下钩子{hooks:{beforesmit:(submission,next)=>{if(submission.data.client.gender==null | | submission.data.client.gender==“”)submission.data.client.gender=null;//仅在准备就绪时调用next。next();}