【问题标题】:Model property values are null on POST when action parameter is called "model"当操作参数称为“模型”时,模型属性值在 POST 上为空
【发布时间】:2018-08-08 09:05:32
【问题描述】:

他们是否更改了 AspNetCore 中的某些内容,不再允许您在 POST 操作中使用参数名称“模型”?

如果我这样做,DeviceModel 属性值会在回发时填充:

[HttpPost] 
public IActionResult Create(DeviceModel device)

但是,如果我将参数名称从“设备”更改为“模型”,则属性值为空。

[HttpPost]
public IActionResult Create(DeviceModel model)

这是 AspNetCore 中的错误还是他们改变了什么?

我找不到任何说明该参数不能称为“模型”的内容,并且在以前的 MVC 版本中这工作正常。

【问题讨论】:

  • 你试过其他名字吗?
  • 当您的DeviceModel 中有一个名为Model 的属性时,通常会发生这种情况。
  • @Mate 是的,似乎只有“模型”有问题。
  • @NevilleNazerane 很有趣,我的 DeviceModel 确实有一个 Model 属性。刚刚删除了该属性并尝试了它...有效!那么这是一个错误吗?我的模型中的一个属性破坏了它似乎很奇怪。
  • 这不是错误。这实际上是有道理的。如果您打算序列化一个字符串。很奇怪,几天前我遇到了确切的问题

标签: c# asp.net-core


【解决方案1】:

请记住,您还可以执行以下操作:

[HttpPost]
public IActionResult Create(string model)

这将获取一个发布为“模型”的键并获取其字符串值。在您的 cmets 中,您的班级中有一个名为 Model 的属性。这意味着您发布的数据包含一个名为“模型”的键。
框架首先尝试反序列化您发布的Model 的值,并将其值分配给DeviceModel model,因为名称匹配。一旦反序列化失败,您将拥有一个具有默认值的 model 对象。

【讨论】:

  • 发现这是设计使然,github.com/aspnet/Mvc/issues/3735
  • 是的...当你需要将列表作为数组传递等时,这个逻辑实际上很有用。js可以序列化和发布。
猜你喜欢
  • 1970-01-01
  • 2018-11-30
  • 1970-01-01
  • 1970-01-01
  • 2016-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-04
相关资源
最近更新 更多