我花了很长时间来追踪一个缺陷,其中MVC操作方法的JSON模型参数始终为null。原因不同于其他相关问题,因此是新问题。
我的行动看起来像这样:
[HttpPost]
public ActionResult SendDeviceDetails(DeviceModel model)
{
model.DoStuffHere();
}
我的模型类看起来像这样:
public class DeviceModel
{
public string Manufacturer { get; set; } // e.g. "Asus"
public string Model { get; set; } // e.g. "Nexus 7"
// etc.
}
模型对象从移动设备发布为JSON字符串。
但是,控制器操作始终抛出NullReferenceException
,因为model
始终为空。我花了一些时间验证数据是从客户端正确发送的,然后开始删除我的模型类并再次重新构建它。 (实际上它有比我在这里展示的更多的属性。)
我发现的是:如果模型类有一个名为Model
的属性,您将始终获得一个传递给您的操作方法的空引用。如果我重命名该属性(例如重命名为ModelName
),一切都会完美无缺。
这真的像我一样疯狂吗?我错过了这个限制的一些正当理由,还是仅仅是MVC的一个完全缺陷?如果我真的想拥有一个名为Model
的属性?
答案 0 :(得分:2)
问题是由与操作参数名称(DeviceModel.Model
)匹配的属性名称(model
)引起的。重命名其中任何一个都可以解决问题。实际上,只要您传递的参数不是Model
,就可以在模型类中拥有model
属性。
疯狂!