【问题标题】:How to fix, MVC model null issue if int is pass as null from json如果 int 从 json 作为 null 传递,如何解决 MVC 模型 null 问题
【发布时间】:2020-02-01 13:29:43
【问题描述】:

我正在使用 formio 在我的 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; }

    }

我的控制器上的 post 方法如下。

[HttpPost]
        public MyResponse Next([FromBody] MyRootModel formCollection)
        {            
            MyResponse myResponse = new MyResponse ();
            myResponse.ReturnType = "Success";
            myResponse.ReturnMessage = "Well done";
            return myResponse ;
        }

表单上的 Gender 是一个 html5 选择类型。提交表单时,我的控制器上的 formCollection 对象会自动初始化,因为 json 是从客户端传递的。但是,如果用户未在 Gender 下拉列表中选择任何值,则 formCollection 将显示为 null。我查看了正在传递的 json,并注意到 "gender": "null" 已传递,这就是 formCollection 显示为空的原因。即使我已将 Gender 定义为 int?在我的客户模型中。

我正在显示从下面的表单提交的 json 用于这两种情况。当用户选择 Gender 时,第一个场景可以正常工作。

formCollection 已正确初始化

{
  "data": {
    "client": {
      "forename": "abc",
      "surname": "def",
      "gender": 2
    },
    "contact": {
      "city": "ghi",
      "street": "jkl"
    },
    "submit": true
  },
  "metadata": {}
}

通过以下 json 时,formColletion 变为 null

{
  "data": {
    "client": {
      "forename": "dsfaasdf",
      "surname": "asdf",
      "gender": "null"
    },
    "contact": {
      "city": "asdf",
      "street": ""
    },
    "submit": true
  },
  "metadata": {}
}

我认为 int? 允许 null 所以我将 Gender 类型从 int 更改为 int? 但仍然无法正常工作。

【问题讨论】:

    标签: json asp.net-mvc asp.net-core


    【解决方案1】:
    {
      "data": {
        "client": {
          "forename": "dsfaasdf",
          "surname": "asdf",
          "gender": null 
        },
        "contact": {
          "city": "asdf",
          "street": ""
        },
        "submit": true
      },
      "metadata": {}
    }
    

    尝试将性别传递为 null 而不是“null”。这是因为代码中模型类 Client 中的性别属性在 int 中,但您正在尝试传递字符串。

    【讨论】:

    • 我不知道我是否可以更改 json,因为它是由 formio 在提交时生成的。
    • 你的方向是正确的,我发现我可以按照formio文档使用钩子在提交之前更改值。我正在使用以下钩子 { hooks: { beforeSubmit: (submission, next) => { if (submission.data.client.gender == null || submit.data.client.gender == "") submit.data.client .gender = null; // 只有在我们准备好时才调用 next。下一个(); } } }
    猜你喜欢
    • 2021-04-19
    • 2015-10-02
    • 2022-01-11
    • 2022-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-26
    相关资源
    最近更新 更多