【问题标题】:Model not binding to JSON模型未绑定到 JSON
【发布时间】:2021-07-21 07:12:33
【问题描述】:

看起来我的模型没有正确绑定,并且字段都是空的。我在网上看过,似乎没有一个解决方案对我有用。我所有的属性都有 setter 和 getter,JSON 的属性名称与模型匹配,我正在对其进行字符串化。我正确设置了我的标题。也许我没有设置一些简单的东西。也许缺少一个包裹?调用不正确?

在前端这就是我发布 JSON 的方式

fetch("/Admin/SaveUser", {
    method: "Post",
    headers: {
        "Content": "application/json",
        'Accept': 'application/json;charset=utf-8'
    },
    body: JSON.stringify(userData)
}).then(response => {
    response.json().then(result => {
        UpdateDisplay();
    });
});

userData的内容

{"UserId":"4dd9f40e-a9ad-418e-9954-e9459c5db1af","FirstName":"Jack","LastName":"","EmployeeCode":"",
 "PhoneNumber":"","Email":"jthor@stackoverflow.com"}

我的控制器方法

 [HttpPost]
 public JsonResult SaveUser(UserModel user)
 {
    UserModel.UpdateUser(user);
    return Json(false);
 }

我的模特

 public class UserModel
{
    public Guid UserId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Email { get; set; }
    public string PhoneNumber { get; set; }
    public string EmployeeCode { get; set; }
    public List<string> UserRoleIds { get; set; }
    public List<string> UserRoleNames { get; set; }
    public List<SelectListItem> Roles { get; set; }

    public UserModel()
    {
        UserRoleIds = new List<string>();
        UserRoleNames = new List<string>();
        Roles = new List<SelectListItem>();
    }
}

【问题讨论】:

  • 您的模型将 UserId 声明为 GUID,它是一种数字类型,但您的输入 JSON 包含该属性的字符串。模型活页夹不太可能让您逃脱惩罚。尝试将 UserId 属性的数据类型更改为字符串。
  • @DaveHolden 字段仍未绑定
  • @DaveHolden 这是.Net Guid。他提供的内容是正确的,如果他解决了他的绑定问题,将绑定到该属性。您来自哪个系统,Guid 是数字类型?
  • @CallumMorrisson 来自 Microsoft 文档:“GUID 是一个 128 位整数(16 个字节),可以在需要唯一标识符的所有计算机和网络中使用。这样的标识符具有非常被复制的可能性很小。” docs.microsoft.com/en-us/dotnet/api/system.guid?view=net-5.0
  • @DaveHolden 不幸的是,找到一些几乎支持您的原始前提的文档并不会改变 在实践中 Guid 不是 .Net 中的数字类型的事实。所以我想我最初的问题仍然是,“你来自哪个系统,Guid 是数字类型?”

标签: javascript c# json model-view-controller


【解决方案1】:

我之前遇到过这个问题,我可以通过添加[FromBody] 属性来解决它。

[HttpPost]
 public JsonResult SaveUser([FromBody] UserModel user)
 {
    UserModel.UpdateUser(user);
    return Json(false);
 }

【讨论】:

  • 这很有趣,我收到 415 错误 UserEdit.js:31 POST https://localhost:44374/Admin/SaveUser 415
  • 看来我需要使用[FromForm] 才不会出现415 错误但模型仍然没有绑定。
【解决方案2】:

尝试将 Content 标头更改为“Content-Type”,它适用于我。

如下:

fetch("/Admin/SaveUser", {
method: "Post",
headers: {
    "Content-Type": "application/json",
    'Accept': 'application/json;charset=utf-8'
},
body: JSON.stringify(userData)
}).then(response => {
    response.json().then(result => {
        UpdateDisplay();
    });
});

【讨论】:

    【解决方案3】:

    我想通了。我没有使用 HTML 手动创建表单,而是使用了 html 帮助器 html.beginform 并且有效。 IDK 为什么这有效,但确实有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-17
      相关资源
      最近更新 更多