如果int从json传递为null,如何修复MVC模型null问题

如果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; }

我正在使用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 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();}